新鮮出爐的PostgreSQL 18

突破性的速度。重大的新功能。

Kyle ChungKyle Chung

速度突破,功能革新。

PostgreSQL 18

漫長的等待終於結束。PostgreSQL 全球開發組已正式發布 PostgreSQL 18,延續其近十年來每年秋季發布重大更新的傳統。這不僅是一次常規的增量更新,更是一個里程碑式的版本,包含了 202 項新功能——比去年增加了 25%。

對於依賴這款全球最受歡迎的資料庫的開發者和團隊而言,PostgreSQL 18 實現了三大核心承諾:革命性的效能、编写更少程式碼的強大新工具,以及更智慧、更安全的操作。

下面,讓我們深入剖析這些將對您的應用程式產生最大影響的功能,並向您展示如何立即在 Zeabur 上開始使用它們。


效能的量子飛躍:非同步 I/O

PostgreSQL 18 中最引人注目的無疑是全新的非同步 I/O (AIO) 子系統。這是一項旨在徹底解決資料庫最大效能瓶頸之一的基礎性升級:等待資料在磁碟和記憶體之間傳輸所花費的時間。

過去的問題: 以前,當 Postgres 需要從磁碟讀取資料時,它必須暫停並等待該操作完成,然後才能繼續執行其他任務。這就像打一個電話然後一直在线等待,寶貴的 CPU 週期被白白浪費,而這些資源本可以用於處理其他工作。

AIO 的解決方案: PostgreSQL 18 徹底改變了這一模式。現在,資料庫可以同時發出多個 I/O 請求,並在磁碟處理這些請求時並行處理其他任務。CPU 資源得以保持空閒,使查詢和背景操作能夠同時進行。

這對您意味著什麼: 初步的部落格文章和基準測試顯示,對於循序掃描和 vacuum 等 I/O 密集型工作負載,效能提升可達 2 到 3 倍。對您的應用程式而言,這意味著:

  • 更快的查詢執行: 您的應用程式回應更靈敏。
  • 更高的吞吐量: 分析和機器學習管線能更快地處理資料。
  • 更高的硬體效率: 無需修改任何一行應用程式程式碼,就能從現有 CPU 中獲得更強的效能。

賦能開發者:更強功能,更少程式碼

Postgres 18 引入了多項改善開發體驗的功能,不僅解決了長期以來的爭論,還讓日常開發工作變得更輕鬆、更高效。

1. 原生支援 UUIDv7

關於主鍵應該使用 SERIAL 還是 UUID 的爭論幾乎可以告一段落了。PostgreSQL 18 引入了原生的 uuidv7() 函式。

  • 它是什麼: 一種嵌入了時間戳的新標準 UUID 格式。
  • 為何更好: 與隨機的 UUIDv4 不同,UUIDv7 的值是自然有序的。這極大地提升了 B-tree 索引的效能和快取效率,從而在加快插入和更新速度的同時,避免了隨機鍵值導致的索引膨脹問題。
-- 使用 UUIDv7 作為主鍵建立資料表
CREATE TABLE orders (
    id UUID PRIMARY KEY DEFAULT uuidv7(),
    total DECIMAL(10,2),
    created_at TIMESTAMP DEFAULT NOW()
);

2. 虛擬衍生欄位成為預設選項

衍生欄位變得更智慧了。在 Postgres 18 中,它們現在預設為 VIRTUAL(虛擬)。

  • 它是什麼: 欄位的值在讀取時動態計算,而不是在寫入時計算並儲存在磁碟上。
  • 為何更好: 這透過消除冗餘資料顯著節省了磁碟空間,並加快了 INSERTUPDATE 操作。它非常適合衍生資料,例如根據 monthly_salary 計算 annual_salary
CREATE TABLE employees (
    salary DECIMAL(10,2),
    -- 'VIRTUAL' 現在是預設值,無需額外關鍵字
    annual_salary DECIMAL(12,2) GENERATED ALWAYS AS (salary * 12)
);

3. 更智慧的索引:B-tree 跳躍掃描

此功能消除了多欄位索引一個長期存在的限制。以前,如果您在 (region, category, sale_date) 上建立了索引,只有當查詢條件包含前導欄位 region 時,才能高效地使用該索引。

  • 它是什麼: 透過跳躍掃描,Postgres 可以智慧地「跳過」被省略的前綴欄位中的不同值。
  • 為何更好: 您的多欄位索引變得更加靈活。現在,即使不按 region 篩選,您也可以高效地按 categorysale_date 進行查詢,使現有索引在分析和報告方面功能更強大。

4. 在 RETURNING 中存取 OLDNEW

RETURNING 子句的功能得到了極大的增強。您現在可以在單個語句中同時存取更新前 (OLD) 和更新後 (NEW) 的值。這對於建立稽核日誌或處理複雜邏輯來說是一個巨大的進步,無需再使用觸發器或額外的查詢。

-- 更新價格並在一個查詢中同時查看新舊值
UPDATE products
SET price = price * 1.10
WHERE name = 'Widget'
RETURNING
    name,
    old.price AS old_price,
    new.price AS new_price;

更智慧、更安全的操作

PostgreSQL 18 還包含了一些能夠減輕維運負擔、幫助您建構更穩健系統的功能。

  • 內建 OAuth 2.0 認證: 這對企業用戶來說是一項重大利好。您現在可以將身份驗證委託給 Google、Auth0 或 Okta 等身份提供商。這集中管理了憑證,並允許應用程式使用存取權杖而不是密碼進行連線。
  • 時間約束 (WITHOUT OVERLAPS): 您現在可以在 schema 層級強制執行基於時間的完整性。這能確保表格中的時間範圍不會錯誤地重疊——非常適用於排程系統、預訂系統或員工合約。它保證了甘特圖上的「時間條」在不應重疊時絕不重疊。
  • 改進的 EXPLAIN 輸出: 查詢最佳化變得更容易了。EXPLAIN ANALYZE 的輸出現在預設包含緩衝區使用資訊,幫助您即時發現以前容易忽略的 I/O 效能問題。

立即在 Zeabur 上部署 PostgreSQL 18

了解這些功能固然很好,但親身體驗更佳。我們很高興地宣布,PostgreSQL 18 現已在 Zeabur 上線,可供部署。

您只需一鍵即可啟動一個全新的、完全設定好的 PostgreSQL 18 服務,將從非同步 I/O 到原生 UUIDv7 的所有強大功能盡握手中。親身體驗這場速度與功能的革命吧。

立即部署 PostgreSQL 18