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 Extension | Purpose |
|---|---|
| pg_trgm | Trigram similarity, fuzzy LIKE |
| pgcrypto | Hashing, encryption |
| pg_stat_statements | Query telemetry |
| postgis | Geospatial |
| pgvector | Vector similarity (AI/ML) |
| citext | Case-insensitive text |