AGENTS-COLLECTION postgres-patterns
PostgreSQL database patterns for query optimization, schema design, indexing, and security. Based on Supabase best practices.
install
source · Clone the upstream repo
git clone https://github.com/mk-knight23/AGENTS-COLLECTION
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/mk-knight23/AGENTS-COLLECTION "$T" && mkdir -p ~/.claude/skills && cp -r "$T/PLUGINS/CLAUDE-CODE/CACHE/EVERYTHING-CLAUDE-CODE/EVERYTHING-CLAUDE-CODE/1.4.1/DOCS/ZH-TW/SKILLS/POSTGRES-PATTERNS" ~/.claude/skills/mk-knight23-agents-collection-postgres-patterns-580218 && rm -rf "$T"
manifest:
PLUGINS/CLAUDE-CODE/CACHE/EVERYTHING-CLAUDE-CODE/EVERYTHING-CLAUDE-CODE/1.4.1/DOCS/ZH-TW/SKILLS/POSTGRES-PATTERNS/SKILL.mdsource content
PostgreSQL 模式
PostgreSQL 最佳實務快速參考。詳細指南請使用
database-reviewer agent。
何時啟用
- 撰寫 SQL 查詢或 migrations
- 設計資料庫 schema
- 疑難排解慢查詢
- 實作 Row Level Security
- 設定連線池
快速參考
索引速查表
| 查詢模式 | 索引類型 | 範例 |
|---|---|---|
| B-tree(預設) | |
| B-tree | |
| 複合 | |
| GIN | |
| GIN | |
| 時間序列範圍 | BRIN | |
資料類型快速參考
| 使用情況 | 正確類型 | 避免 |
|---|---|---|
| IDs | | 、隨機 UUID |
| 字串 | | |
| 時間戳 | | |
| 金額 | | |
| 旗標 | | 、 |
常見模式
複合索引順序:
-- 等值欄位優先,然後是範圍欄位 CREATE INDEX idx ON orders (status, created_at); -- 適用於:WHERE status = 'pending' AND created_at > '2024-01-01'
覆蓋索引:
CREATE INDEX idx ON users (email) INCLUDE (name, created_at); -- 避免 SELECT email, name, created_at 時的表格查詢
部分索引:
CREATE INDEX idx ON users (email) WHERE deleted_at IS NULL; -- 更小的索引,只包含活躍使用者
RLS 政策(優化):
CREATE POLICY policy ON orders USING ((SELECT auth.uid()) = user_id); -- 用 SELECT 包裝!
UPSERT:
INSERT INTO settings (user_id, key, value) VALUES (123, 'theme', 'dark') ON CONFLICT (user_id, key) DO UPDATE SET value = EXCLUDED.value;
游標分頁:
SELECT * FROM products WHERE id > $last_id ORDER BY id LIMIT 20; -- O(1) vs OFFSET 是 O(n)
佇列處理:
UPDATE jobs SET status = 'processing' WHERE id = ( SELECT id FROM jobs WHERE status = 'pending' ORDER BY created_at LIMIT 1 FOR UPDATE SKIP LOCKED ) RETURNING *;
反模式偵測
-- 找出未建索引的外鍵 SELECT conrelid::regclass, a.attname FROM pg_constraint c JOIN pg_attribute a ON a.attrelid = c.conrelid AND a.attnum = ANY(c.conkey) WHERE c.contype = 'f' AND NOT EXISTS ( SELECT 1 FROM pg_index i WHERE i.indrelid = c.conrelid AND a.attnum = ANY(i.indkey) ); -- 找出慢查詢 SELECT query, mean_exec_time, calls FROM pg_stat_statements WHERE mean_exec_time > 100 ORDER BY mean_exec_time DESC; -- 檢查表格膨脹 SELECT relname, n_dead_tup, last_vacuum FROM pg_stat_user_tables WHERE n_dead_tup > 1000 ORDER BY n_dead_tup DESC;
設定範本
-- 連線限制(依 RAM 調整) ALTER SYSTEM SET max_connections = 100; ALTER SYSTEM SET work_mem = '8MB'; -- 逾時 ALTER SYSTEM SET idle_in_transaction_session_timeout = '30s'; ALTER SYSTEM SET statement_timeout = '30s'; -- 監控 CREATE EXTENSION IF NOT EXISTS pg_stat_statements; -- 安全預設值 REVOKE ALL ON SCHEMA public FROM public; SELECT pg_reload_conf();
相關
- Agent:
- 完整資料庫審查工作流程database-reviewer - Skill:
- ClickHouse 分析模式clickhouse-io - Skill:
- API 和後端模式backend-patterns
基於 Supabase Agent Skills(MIT 授權)