Extensions
部分內容由 LLM 生成,尚未經過人工驗證。
Extension 清單
核心推薦
| Extension | 說明 | 適用情境 |
|---|---|---|
uuid-ossp | 生成 UUID(v1/v4) | 主鍵使用 UUID |
pgcrypto | 加密函數(hash、加解密) | 密碼儲存、資料加密 |
pg_stat_statements | 追蹤 SQL 執行統計 | 效能分析、慢查詢偵測 |
btree_gin | GIN index 支援 B-tree 型別 | 複合索引優化 |
pg_trgm | Trigram 相似度搜尋 | 模糊搜尋、LIKE 加速 |
進階實用
| Extension | 說明 | 適用情境 |
|---|---|---|
hstore | 鍵值對儲存 | 半結構化資料 |
ltree | 樹狀路徑查詢 | 分類、組織架構 |
intarray | 整數陣列操作與索引 | 標籤系統、多值過濾 |
tablefunc | crosstab 樞紐表 | 報表查詢 |
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;