AI Agent PostgreSQL Workspace 隔離部署方案比較:Neon、PGlite、自架容器

比較四種讓 AI Agent 取得隔離 PostgreSQL workspace 的方案:Neon branch、PGlite 內嵌、自架容器與多租戶引擎。涵蓋 REST、pgvector、MCP 介面整合與安全實務。

讓 AI Agent 廉價、安全、快速地取得一個完全隔離、且具備 REST、向量搜尋與 MCP 介面的 PostgreSQL workspace,是 2025 年 AI 基礎設施的關鍵挑戰。本文深入比較四條可行路線,並提供選型建議與安全實務。

問題的本質:四個約束的交叉

「一個 Agent 一個資料庫」在 2024 年之前不成立,因為傳統 Postgres 的 provisioning 成本遠高於一個 Agent 任務的價值。近兩年三項底層技術改變了局面:

  1. Copy-on-write / 分離儲存與運算 — 讓「開一個完整隔離的 DB」從分鐘級、按 GB 計費,變成秒級、只算 delta。
  2. Postgres 一站式化 — pgvector / pgvectorscale / BM25 進到 Postgres 本體,vector workspace 不再需要第二套系統。
  3. MCP 成為 provisioning 介面 — Agent 不只是查資料,而是自己開 DB、開 branch、跑 migration、丟掉 branch。

正確的拆解是:隔離邊界放在哪一層(branch / fork / database / container / process)→ 決定了成本、速度與安全模型,而 REST、vector、MCP 三個介面是分別補上去的。

四條可行路線

路線 A:託管 Postgres 的 branch / fork(目前的主流答案)

隔離邊界 = copy-on-write branch。這是「便宜 + 快 + 有真資料」三者唯一同時成立的組合。

  • Neon 的 branch 是即時的 copy-on-write clone,不做完整資料複製,每個 branch 有自己的 compute endpoint。
  • Tiger Data 的 Agentic Postgres 同樣以 copy-on-write block storage 讓資料庫可即時 fork,每個 agent 幾秒內拿到一份完整生產資料的隔離環境,只為變動的 block 付費。
  • 安全模式:不要給 agent 直連 production,而是給它一個 fork,在 fork 內開放完整寫入權限,事後審查結果再 merge。

路線 B:自架容器(Postgres + pgvector + PostgREST + MCP server)

隔離邊界 = 容器 / microVM。最便宜(只有自己的機器成本)、最可控、無廠商鎖定,但 provisioning 速度取決於你的 orchestration,冷啟通常在數秒到數十秒,且 REST 層、MCP 層、憑證輪替、TTL 回收全部要自己組。適合已有 K8s / Nomad / Fly Machines 基礎的團隊。

路線 C:進程內嵌(PGlite)

隔離邊界 = process。PGlite 是編譯成 WASM 的 Postgres,打包為 TypeScript client library,可在 browser、Node.js、Bun、Deno 執行,不需安裝任何其他相依,gzip 後僅約 3MB,支援包含 pgvector 在內的多個 Postgres extension,且支援 memory:// 純記憶體、file:// 檔案系統、idb:// IndexedDB 三種儲存後端。

這條路線在 agent sandbox 的定位非常明確:AI coding agent 在 sandbox 裡寫程式時,sandbox 必須像 production 到足以讓工作有意義,同時又要夠便宜、夠快、可拋棄。代價是單使用者 / 單連線,且與應用程式同 process 執行,沒有網路層隔離,記憶體同空間——它隔離的是「資料」,不是「執行」。

路線 D:Agent 專用多租戶引擎(新興)

YugabyteDB AMP(Agentic Multitenant PostgreSQL)主打 scale-to-zero serverless,每個 agent 得到一個真實隔離的資料庫,起步僅需 a fraction of a core,並以 Resource Governance 把數百個突發、易閒置的 agent workload 打包在共享的分散式基礎設施上,同時提供 in-database RAG、vector search、MCP 2.0 與 database branching。屬於「fleet 規模」才需要考慮的選項,成熟度與生態仍在早期。

方案比較表

方案 隔離邊界 REST Vector MCP 成本模型
Neon Project / Branch (CoW) 原生 Data API (PostgREST 相容) pgvector + HNSW 官方 remote MCP,OAuth 分離儲存運算、scale-to-zero、只計 delta
Tiger Data Agentic Postgres Service Fork (CoW) 需自架 pgvectorscale + pg_textsearch (BM25) tiger mcp install 只付變動 block
supabase/mcp Project / Branch PostgREST 內建 pgvector 官方 MCP + mcp-server-postgrest branching 需付費方案
prisma/mcp Database instance 需自架 pgvector(Postgres 內做 RAG) local + remote 雙 MCP server 用量計費、毫秒級 provision
electric-sql/pglite Process (in-proc) 需自架 pgvector(動態載入) 需自架 幾乎為零,僅記憶體/磁碟
crystaldba/postgres-mcp 不負責隔離(掛在既有 DB 上) 支援 pgvector 語境 本體即 MCP,含 restricted mode 自架
neverinfamous/postgres-mcp 不負責隔離 HTTP/SSE transport pgvector 一級支援 Code Mode + OAuth 2.1 自架
YugabyteDB AMP 每 agent 一個獨立 DB 原生 vector + in-DB RAG MCP 2.0 scale-to-zero,分數核起跳

三個介面怎麼補齊

REST 層

最省事的做法是用已內建 PostgREST 相容層的平台。Neon 的 Data API 直接針對 agent 場景設計:以 HTTPS 溝通,agent 用 fetch() 或 curl 即可,不需要任何 Postgres client library;JWT + RLS 確保每個 agent 只拿到它該有的存取權。即使資料庫 compute 在閒置時降載,REST 服務本身始終在線,且提供 per-branch endpoint——隔離邊界與 REST 邊界對齊。

自架路線則直接跑 PostgREST sidecar,以 JWT claim 對應 Postgres role,讓 RLS 成為真正的權限邊界。

Vector 層

  • pgvector 是預設答案,覆蓋率最廣,HNSW 索引足以應付多數 agent memory / RAG 規模。
  • 規模拉大時,Tiger 的 pgvectorscale 與 pgvector 並存,其 StreamingDiskANN 索引支援最高 16,000 維向量,text-embedding-3-large 這類大模型不需再降級為 halfvec。
  • 混合檢索:pg_textsearch 實作 BM25 排序關鍵字搜尋,目前使用記憶體結構換取速度,磁碟分段與壓縮仍在開發中——選型時要留意成熟度風險。

MCP 層

分成兩類,不要混用:

A. Provisioning MCP(管平台) — Neon MCP server 把自然語言請求翻譯成 Neon API 呼叫,涵蓋建立 project、建立 branch、執行查詢與 migration。關鍵是其 migration 流程:prepare_database_migration 會從 production 資料建立即時 CoW branch,migration 先跑在該 branch 上,agent 驗證結果後再呼叫 complete_database_migration 合併回 main,出錯就丟掉 branch。Prisma 的 remote server 同理:負責 Prisma Postgres 資料庫的 provisioning、備份與連線字串管理。

B. Data-plane MCP(管單一 DB) — crystaldba/postgres-mcp 提供 unrestricted 與 restricted 兩種存取模式,restricted 限制為唯讀交易並施加執行時間上限。它處理了一個容易被忽略的攻擊面:LLM 可以透過發出 ROLLBACK 再開新交易來繞過唯讀交易模式,因此該專案使用 pglast 在執行前解析 SQL,拒絕任何包含 commit 或 rollback 的語句——這是判斷一個 Postgres MCP server 是否認真的試金石。

安全:真正的威脅不是「agent 刪庫」

大多數人以為最大風險是 LLM 刪改資料,因此有了唯讀模式、project-scoped 模式與 feature group 限制;但即使在唯讀模式下,prompt injection 仍是頭號問題。經典案例:攻擊者提交一張客服工單,內文夾帶指令要求 assistant 讀取 integration_tokens 表並把內容寫回工單;當開發者用 Cursor + Supabase MCP 以 service_role(繞過所有 RLS)去「列出最新工單」時,assistant 就把私密資料寫進攻擊者看得到的欄位。

因此「安全」在這個架構裡必須落在平台層與資料層,而不是模型層:

控制點 具體做法
隔離 一 agent 一 branch / fork / container;production 永遠不在 agent 的 context 內
權限 JWT + RLS,而非 service_role;Supabase 的唯讀模式使用專屬的 supabase_read_only_user role
工具面 project scoping + feature group 白名單,只暴露該任務需要的 tool
SQL 面 執行前 AST 解析(pglast 式),拒絕 COMMIT/ROLLBACK 與 DDL
資料面 用 masked / anonymized 資料集開 branch,而非真實 PII
生命週期 branch 帶 TTL 自動銷毀;合併回 main 必須人工 review diff

建議的參考架構(依預算與規模分檔)

檔位 1:本機 / CI / 大量拋棄式任務(成本趨近零)

PGlite(memory://)+ pgvector extension + 自寫薄 MCP wrapper。每個 agent 一個 process,任務結束連磁碟都不留。適合單元測試、schema 實驗、短期 RAG。缺點是單連線、無網路隔離。

檔位 2:要真資料、要秒級、要 REST(主流建議)

Neon project → 每個 agent 一個 branch → 該 branch 的 Data API endpoint(JWT + RLS)→ Neon MCP 負責 provisioning、crystaldba/postgres-mcp restricted mode 負責 data plane。流程固定為:開 branch → agent 全權在 branch 內操作 → 人工 review diff → merge 或丟棄。若向量規模是主要瓶頸,同樣拓撲換成 Tiger Data 的 fork + pgvectorscale。

檔位 3:自主可控 / 資料不出境

Fly Machines 或 K8s Job 起 pgvector/pgvector image + PostgREST sidecar + postgres-mcp,前面掛一層 provisioning API 負責發 scoped JWT 與 TTL 回收。成本最低、鎖定最少,但你要自己承擔冷啟延遲與運維。

選型時最容易踩的三個坑

  1. 把 MCP 當成隔離機制。 MCP 是介面協定,不提供任何隔離。隔離必須來自 branch、container 或 process。read-only flag 只是減少一條攻擊路徑,不是邊界。
  2. 忽略 provisioning 延遲以外的延遲。 scale-to-zero 平台的冷啟差異巨大,建議自行 benchmark。
  3. 在 fork 裡放真 PII。 fork 的價值是「像 production」,但一旦 agent 讀得到真實使用者資料,lethal trifecta 就完整了(存取私密資料 + 接觸不可信輸入 + 對外通訊能力)。用 data masking 開 branch,是這個架構唯一便宜的解法。

結論

選擇哪條路線取決於你的核心約束:需要真資料且秒級隔離?選 Neon 或 Tiger Data 的 CoW branch。成本趨近零且可拋棄?選 PGlite 內嵌。自主可控且已有容器基礎?選自架容器。管理數百個 agent fleet?考慮 YugabyteDB AMP。無論哪條路線,記住安全邊界必須落在平台層與資料層,而非模型層。