~/VibeHandbook
免費 PDF

資料庫

postgresql.org

PostgreSQL

是什麼

PostgreSQL 是一個成熟的開源關係型資料庫,它將資料儲存在帶型別的表中,並對 (結構化查詢語言)、事務和資料完整性提供強力支援。它以正確性、可擴充套件性以及 JSONB(Postgres 的二進位制 型別)、全文搜尋、視窗函式等豐富特性而著稱。對於大多數需要可靠結構化資料的應用後端而言,它是預設的選擇。

優勢

  • 設想一次銀行轉賬:要麼全額完成,要麼全部取消,絕不會只做一半。這種"要麼全做、要麼全不做"的保證就叫 ACID(原子性、一致性、隔離性、永續性)事務,而 Postgres 預設提供強一致性。
  • 強大的 SQL:連線、CTE(公用表表達式)、視窗函式和聚合。
  • 靈活的型別,包括 JSONB、陣列、範圍和自定義型別。
  • PostGIS(地理空間)和 pgvector(嵌入向量)等擴充套件。
  • 強約束、外部索引鍵和檢查規則確保資料質量。

取捨

  • 垂直擴充套件很容易;水平分片則需要額外的工具。
  • 隨著模型演進,需要進行模式遷移。
  • 對於極小的專案,相比單檔案資料庫,運維更為沉重。
  • 在高併發規模下,每客戶端一個連線的模型需要連線池(PgBouncer)。

何時使用

對於幾乎任何涉及關係型資料、事務或報表需求的應用,都可以把 PostgreSQL 作為預設選擇:SaaS(軟體即服務)後端、電商、分析,以及任何能從約束和連線中獲益的場景。

與 vibe coding 的契合度

在指揮 AI 時,給出實體及其相互關係,然後讓它產出一個規範化的模式,包含主鍵、外部索引鍵、NOT NULL 約束和合理的索引。堅持使用引數化查詢(絕不要用字串拼接的 SQL)以防止注入,並讓 AI 將多步寫入包裹在一個事務中。一個好建議:告訴 AI 同時生成一個可回滾的遷移檔案。也讓它解釋所新增的每個索引。這樣你就能在應用之前理解讀寫上的取捨。

CREATE TABLE users (
  id         BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  email      TEXT NOT NULL UNIQUE,
  created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);

CREATE TABLE orders (
  id       BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  user_id  BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
  total    NUMERIC(10,2) NOT NULL CHECK (total >= 0),
  status   TEXT NOT NULL DEFAULT 'pending'
);

CREATE INDEX idx_orders_user_id ON orders(user_id);

-- 引數化查詢(使用佔位符,而非拼接)
SELECT o.id, o.total
FROM orders o
WHERE o.user_id = $1 AND o.status = $2;