Extensions

部分內容由 LLM 生成,尚未經過人工驗證。

Extension 清單

核心推薦

Extension說明適用情境
uuid-ossp生成 UUID(v1/v4)主鍵使用 UUID
pgcrypto加密函數(hash、加解密)密碼儲存、資料加密
pg_stat_statements追蹤 SQL 執行統計效能分析、慢查詢偵測
btree_ginGIN index 支援 B-tree 型別複合索引優化
pg_trgmTrigram 相似度搜尋模糊搜尋、LIKE 加速

進階實用

Extension說明適用情境
hstore鍵值對儲存半結構化資料
ltree樹狀路徑查詢分類、組織架構
intarray整數陣列操作與索引標籤系統、多值過濾
tablefunccrosstab 樞紐表報表查詢
postgres_fdw跨 PostgreSQL 實例查詢多資料庫整合

特殊場景

Extension說明適用情境
timescaledb時序資料優化IoT、監控指標
postgis地理空間資料位置查詢、地圖應用
vector (pgvector)向量相似度搜尋AI embedding 儲存
citus水平分片大規模分散式資料庫

Docker Compose 配置

方案 A:基礎實用版(推薦)

適合一般應用,使用官方 postgres:17-alpine 映像。

docker-compose.yml
services:
  postgres:
    image: postgres:17-alpine
    container_name: postgres-dev
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: mydb
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./init-scripts:/docker-entrypoint-initdb.d
    restart: unless-stopped

volumes:
  postgres_data:

初始化腳本:

init-scripts/01-extensions.sql
-- 核心推薦 extensions
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS pgcrypto;
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
CREATE EXTENSION IF NOT EXISTS btree_gin;
CREATE EXTENSION IF NOT EXISTS pg_trgm;

-- 視需求加入
-- CREATE EXTENSION IF NOT EXISTS hstore;
-- CREATE EXTENSION IF NOT EXISTS ltree;
-- CREATE EXTENSION IF NOT EXISTS intarray;

方案 B:進階完整版(含 TimescaleDB)

使用 timescaledb-ha:pg17 映像,內建 TimescaleDB 及更多 extensions。

docker-compose.yml
services:
  postgres:
    image: timescale/timescaledb-ha:pg17
    container_name: postgres-timescale
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: secret
      POSTGRES_DB: mydb
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/home/postgres/pgdata/data
      - ./init-scripts:/docker-entrypoint-initdb.d
    restart: unless-stopped

volumes:
  postgres_data:

初始化腳本:

init-scripts/01-extensions-advanced.sql
-- TimescaleDB(映像內建)
CREATE EXTENSION IF NOT EXISTS timescaledb;

-- 核心 extensions
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE EXTENSION IF NOT EXISTS pgcrypto;
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
CREATE EXTENSION IF NOT EXISTS btree_gin;
CREATE EXTENSION IF NOT EXISTS pg_trgm;

-- 進階 extensions
CREATE EXTENSION IF NOT EXISTS hstore;
CREATE EXTENSION IF NOT EXISTS ltree;
CREATE EXTENSION IF NOT EXISTS intarray;
CREATE EXTENSION IF NOT EXISTS postgres_fdw;

-- 向量搜尋(需映像支援)
-- CREATE EXTENSION IF NOT EXISTS vector;

驗證

啟動容器並連入:

Terminal
docker compose up -d
docker exec -it postgres-dev psql -U admin -d mydb

列出已啟用的 extensions:

\dx

確認特定 extension 版本:

SELECT name, default_version, installed_version
FROM pg_available_extensions
WHERE installed_version IS NOT NULL
ORDER BY name;

測試 uuid-ossp:

SELECT uuid_generate_v4();

查詢 pg_stat_statements(需 shared_preload_libraries 設定,詳見官方文件):

SELECT query, calls, mean_exec_time
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 10;