Managing Extensions

1. Listing Available Extensions

SELECT name, default_version, comment FROM pg_available_extensions ORDER BY name;

2. Listing Installed Extensions

\dx
SELECT extname, extversion FROM pg_extension;

3. Installing Extension

CREATE EXTENSION IF NOT EXISTS pg_trgm;

4. Creating Extension in Schema

CREATE SCHEMA ext;
CREATE EXTENSION pgcrypto WITH SCHEMA ext;

5. Using uuid-ossp Extension

CREATE EXTENSION "uuid-ossp";
SELECT uuid_generate_v4();
-- PG 13+ also has built-in gen_random_uuid()

6. Using pgcrypto Extension

SELECT crypt('pw', gen_salt('bf', 12));      -- bcrypt
SELECT encode(digest('hello', 'sha256'),'hex');
SELECT encode(hmac('msg','key','sha256'),'hex');

7. Using pg_trgm Extension

SELECT similarity('postgresql','postgrez');
SELECT * FROM customers WHERE full_name % 'jon smyth';
CREATE INDEX customers_name_trgm ON customers USING gin (full_name gin_trgm_ops);

8. Using hstore Extension

CREATE EXTENSION hstore;
SELECT 'a=>1, b=>2'::hstore -> 'a';
-- Today: prefer JSONB for new designs

9. Using citext Extension

CREATE EXTENSION citext;
CREATE TABLE users (email citext UNIQUE);    -- case-insensitive equality

10. Using ltree Extension

CREATE EXTENSION ltree;
SELECT 'a.b.c'::ltree <@ 'a.b';      -- true (descendant)

11. Using pg_stat_statements Extension

-- postgresql.conf: shared_preload_libraries = 'pg_stat_statements'
CREATE EXTENSION pg_stat_statements;
SELECT queryid, calls, total_exec_time, mean_exec_time, query
  FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 20;

12. Using PostGIS Extension

CREATE EXTENSION postgis;
SELECT ST_AsText(ST_Point(-122.42, 37.77));
SELECT * FROM shops
 WHERE ST_DWithin(location, ST_MakePoint(-122,37)::geography, 1000);

13. Updating Extension

ALTER EXTENSION pg_trgm UPDATE;
ALTER EXTENSION pg_trgm UPDATE TO '1.6';

14. Dropping Extension

DROP EXTENSION IF EXISTS pg_trgm CASCADE;
Common ExtensionPurpose
pg_trgmTrigram similarity, fuzzy LIKE
pgcryptoHashing, encryption
pg_stat_statementsQuery telemetry
postgisGeospatial
pgvectorVector similarity (AI/ML)
citextCase-insensitive text