postgres-first 是做什麼的?
用原生 PostgreSQL 取代 Redis、MongoDB、n8n、Elasticsearch。一個 Claude 技能。
簡介
此技能讓開發者與 AI 代理能夠將多個資料服務整合到單一 PostgreSQL 資料庫中,充分利用其豐富的擴充功能與現代功能。它為以下常見場景提供了替代方案:
- Redis:使用 PostgreSQL 的
LISTEN/NOTIFY、pgmq擴充功能實現佇列,以及pgxact實現輕量級快取。 - MongoDB:使用
JSONB資料類型與GIN索引實現靈活的文件儲存與查詢。 - n8n:使用 PostgreSQL 的
pg_cron排程器與觸發器實現工作流程自動化。 - Elasticsearch:使用
pg_search擴充功能(或tsvector/tsquery)實現全文搜尋。
支援的平台
- Claude Code
- Cursor
- Codex
使用方式
請遵循以下步驟開始使用:
-
確保你有一個執行中的 PostgreSQL 實例(14 版以上)。
-
啟用所需的擴充功能:
CREATE EXTENSION IF NOT EXISTS pgmq; CREATE EXTENSION IF NOT EXISTS pg_cron; CREATE EXTENSION IF NOT EXISTS pg_search; -
使用以下查詢建立對應的資料表:
-- 取代 Redis 佇列 CREATE TABLE queue ( id BIGSERIAL PRIMARY KEY, payload JSONB, status TEXT DEFAULT 'pending', created_at TIMESTAMPTZ DEFAULT NOW() ); -- 取代 MongoDB 文件 CREATE TABLE documents ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), data JSONB, created_at TIMESTAMPTZ DEFAULT NOW() ); CREATE INDEX idx_documents_data ON documents USING GIN (data); -- 取代 Elasticsearch 搜尋 CREATE TABLE articles ( id SERIAL PRIMARY KEY, title TEXT, body TEXT, search_vector tsvector ); CREATE INDEX idx_articles_search ON articles USING GIN (search_vector); -
將你的應用程式程式碼改為直接使用 PostgreSQL 查詢。
設定
環境變數:
DATABASE_URL:PostgreSQL 連線字串。PGHOST、PGPORT、PGDATABASE、PGUSER、PGPASSWORD:單獨的連線參數。
最佳實務
- 對 JSONB 查詢使用
GIN索引以獲得最佳效能。 - 對於延遲敏感的佇列,考慮使用
pgmq專用擴充功能。 - 使用
pg_partman分割大型資料表。 - 定期執行
VACUUM與ANALYZE以維護效能。
疑難排解
- 如果全文搜尋結果不完整,請確保已正確設定文字搜尋設定(例如語言)。
- 佇列消費者可能需要在 PostgreSQL 中使用
LISTEN/NOTIFY以實現即時訊息傳遞。 - 檢查
pg_cron日誌以確認排程工作是否正常執行。
限制
- PostgreSQL 並非為了處理極高並發的鍵值儲存而最佳化;若需此類場景,請考慮混合使用 Redis。
- 對於複雜的 Elasticsearch 聚合,某些功能可能需要額外擴充功能或自訂實作。
貢獻
歡迎透過 Issues 與 Pull Requests 貢獻。請先閱讀 CONTRIBUTING.md(如有)。
授權
本專案採用 MIT 授權條款。