漫長的等待終於結束。PostgreSQL 全球開發組已正式發布 PostgreSQL 18,延續其近十年來每年秋季發布重大更新的傳統。這不僅是一次常規的增量更新,更是一個里程碑式的版本,包含了 202 項新功能——比去年增加了 25%。
對於依賴這款全球最受歡迎的資料庫的開發者和團隊而言,PostgreSQL 18 實現了三大核心承諾:革命性的效能、编写更少程式碼的強大新工具,以及更智慧、更安全的操作。
下面,讓我們深入剖析這些將對您的應用程式產生最大影響的功能,並向您展示如何立即在 Zeabur 上開始使用它們。
PostgreSQL 18 中最引人注目的無疑是全新的非同步 I/O (AIO) 子系統。這是一項旨在徹底解決資料庫最大效能瓶頸之一的基礎性升級:等待資料在磁碟和記憶體之間傳輸所花費的時間。
過去的問題: 以前,當 Postgres 需要從磁碟讀取資料時,它必須暫停並等待該操作完成,然後才能繼續執行其他任務。這就像打一個電話然後一直在线等待,寶貴的 CPU 週期被白白浪費,而這些資源本可以用於處理其他工作。
AIO 的解決方案: PostgreSQL 18 徹底改變了這一模式。現在,資料庫可以同時發出多個 I/O 請求,並在磁碟處理這些請求時並行處理其他任務。CPU 資源得以保持空閒,使查詢和背景操作能夠同時進行。
這對您意味著什麼: 初步的部落格文章和基準測試顯示,對於循序掃描和 vacuum 等 I/O 密集型工作負載,效能提升可達 2 到 3 倍。對您的應用程式而言,這意味著:
Postgres 18 引入了多項改善開發體驗的功能,不僅解決了長期以來的爭論,還讓日常開發工作變得更輕鬆、更高效。
關於主鍵應該使用 SERIAL 還是 UUID 的爭論幾乎可以告一段落了。PostgreSQL 18 引入了原生的 uuidv7() 函式。
-- 使用 UUIDv7 作為主鍵建立資料表
CREATE TABLE orders (
id UUID PRIMARY KEY DEFAULT uuidv7(),
total DECIMAL(10,2),
created_at TIMESTAMP DEFAULT NOW()
);
衍生欄位變得更智慧了。在 Postgres 18 中,它們現在預設為 VIRTUAL(虛擬)。
INSERT 和 UPDATE 操作。它非常適合衍生資料,例如根據 monthly_salary 計算 annual_salary。CREATE TABLE employees (
salary DECIMAL(10,2),
-- 'VIRTUAL' 現在是預設值,無需額外關鍵字
annual_salary DECIMAL(12,2) GENERATED ALWAYS AS (salary * 12)
);
此功能消除了多欄位索引一個長期存在的限制。以前,如果您在 (region, category, sale_date) 上建立了索引,只有當查詢條件包含前導欄位 region 時,才能高效地使用該索引。
region 篩選,您也可以高效地按 category 和 sale_date 進行查詢,使現有索引在分析和報告方面功能更強大。RETURNING 中存取 OLD 和 NEW 值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 還包含了一些能夠減輕維運負擔、幫助您建構更穩健系統的功能。
WITHOUT OVERLAPS): 您現在可以在 schema 層級強制執行基於時間的完整性。這能確保表格中的時間範圍不會錯誤地重疊——非常適用於排程系統、預訂系統或員工合約。它保證了甘特圖上的「時間條」在不應重疊時絕不重疊。EXPLAIN 輸出: 查詢最佳化變得更容易了。EXPLAIN ANALYZE 的輸出現在預設包含緩衝區使用資訊,幫助您即時發現以前容易忽略的 I/O 效能問題。了解這些功能固然很好,但親身體驗更佳。我們很高興地宣布,PostgreSQL 18 現已在 Zeabur 上線,可供部署。
您只需一鍵即可啟動一個全新的、完全設定好的 PostgreSQL 18 服務,將從非同步 I/O 到原生 UUIDv7 的所有強大功能盡握手中。親身體驗這場速度與功能的革命吧。