Community程式設計與開發github.com

Thanane15M/postgres-first

用原生 PostgreSQL 取代 Redis、MongoDB、n8n、Elasticsearch。一個 Claude 技能。

postgres-first 是什麼?

此技能「Thanane15M/postgres-first」旨在幫助開發者與 AI 代理(如 Claude)用單一 PostgreSQL 資料庫取代多種獨立服務,包括 Redis(快取/佇列)、MongoDB(文件儲存)、n8n(工作流程自動化)和 Elasticsearch(全文搜尋)。其主要優點是簡化基礎架構、降低營運複雜度,並利用 PostgreSQL 的擴充功能(如 pgvector、pgmq、pg_search 等)來實現相同的功能。該技能支援 Claude Code、Cursor 和 Codex 等平台,透過提供詳細的設定指南和最佳實務,引導使用者將現有工作流程遷移到以 PostgreSQL 為中心的架構。它解釋了如何用原生 SQL 語法和 PostgreSQL 內建功能來取代各項服務,從而減少維護多個資料儲存層所帶來的開銷與潛在問題。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add Thanane15M/postgres-first

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

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

使用方式

請遵循以下步驟開始使用:

  1. 確保你有一個執行中的 PostgreSQL 實例(14 版以上)。

  2. 啟用所需的擴充功能:

    CREATE EXTENSION IF NOT EXISTS pgmq;
    CREATE EXTENSION IF NOT EXISTS pg_cron;
    CREATE EXTENSION IF NOT EXISTS pg_search;
    
  3. 使用以下查詢建立對應的資料表:

    -- 取代 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);
    
  4. 將你的應用程式程式碼改為直接使用 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 授權條款。

相關技能