PostgreSQL 全球開發組宣佈 PostgreSQL 18 的第一個 Beta 版本現已 開放下載。此版本包含了 PostgreSQL 18 正式釋出時所有功能的預覽,儘管在 Beta 期間某些細節仍可能發生變化。
您可以在 釋出說明 中找到有關 PostgreSQL 18 所有功能和變更的資訊。
https://postgres.tw/docs/18/release-18.html
秉承開源 PostgreSQL 社群的精神,我們強烈鼓勵您在自己的系統上測試 PostgreSQL 18 的新功能,以幫助我們消除 bug 和其他問題。雖然我們不建議您在生產環境中使用 PostgreSQL 18 Beta 1,但我們鼓勵您嘗試在 Beta 版本上執行您典型的應用程式工作負載。
您的測試和反饋有助於社群確保 PostgreSQL 18 保持我們交付世界上最先進的開源關係型資料庫的穩定、可靠的釋出標準。請閱讀我們關於 beta 測試過程的更多資訊,以及您如何做出貢獻。
https://postgres.tw/developer/beta/
以下是 PostgreSQL 18 計劃中的一些功能亮點。此列表並非詳盡無遺;如需完整的計劃功能列表,請參閱 釋出說明。
PostgreSQL 18 引入了非同步 I/O (AIO) 子系統。這個新子系統可以提高 I/O 吞吐量並隱藏 I/O 延遲。在 Linux 上可以使用 io_uring 實現 AIO,所有平臺都提供了基於 worker 的實現。此初始版本支援檔案系統讀取,如順序掃描、點陣圖堆掃描和 VACUUM 操作,測試顯示效能提升高達 2-3 倍。
這些效能提升也延伸到了查詢最佳化和新索引功能。PostgreSQL 18 增加了對多列 B-tree 索引使用“跳躍掃描”(skip scan) 的支援,這可以加快那些在索引列的某個或多個字首上省略 "=" 條件的查詢的執行速度。此版本還優化了包含 OR 和 IN (...) 語句的 WHERE 子句,以便更好地利用最近的索引改進,這也可能帶來更好的查詢效能。此外,PostgreSQL 在表連線的規劃和執行方面也有多項效能改進,包括提高雜湊連線的整體效能以及允許合併連線使用增量排序。
PostgreSQL 18 還提供了其他多種功能,可提高其他查詢和維護操作的效能。PostgreSQL 18 現在支援 GIN 索引的並行構建,GIN 索引常用於 JSON 和全文資料的搜尋。此版本還允許您使用非 B-tree 的唯一索引來定義分割槽鍵和物化檢視。PostgreSQL 18 還提高了訪問許多關係(relations)的查詢的整體鎖定效能,並對分割槽表上的查詢進行了多項改進,包括增強的剪枝(pruning)和連線支援。PostgreSQL 18 在文字處理方面也有效能改進,包括對 upper/lower 函式的整體加速以及新增的內建排序規則 PG_UNICODE_FAST。
在 PostgreSQL 18 之前,執行主版本升級後的一個重要步驟是執行 ANALYZE 來生成統計資訊,這是幫助 PostgreSQL 選擇最有效的查詢計劃的關鍵組成部分。根據 PostgreSQL 叢集的大小和整體活動情況,這可能是一個耗時的過程,並且在過程完成之前可能會影響查詢效能。PostgreSQL 18 引入了在主版本升級後保留規劃器統計資訊的能力,這有助於升級後的叢集更快地達到預期的效能狀態。
此外,用於促進主版本升級的工具 pg_upgrade 增加了一些效能增強功能,以幫助加速包含大量物件(如表和序列)的升級。此版本還允許 pg_upgrade 根據 --jobs 標誌的設定並行處理其檢查,並增加了 --swap 標誌,該標誌會交換升級目錄而不是複製、克隆或連結檔案。
PostgreSQL 18 引入了虛擬生成列,它們在查詢執行期間按需計算列值,而不是儲存它們。這是生成列的預設選項。此外,儲存的生成列現在可以進行邏輯複製。
此版本增加了在 INSERT、UPDATE、DELETE 和 MERGE 命令的 RETURNING 子句中訪問前一個值 (OLD) 和當前值 (NEW) 的能力。此外,PostgreSQL 18 透過 uuidv7() 函式增加了對 UUIDv7 生成的支援,允許您生成時間戳排序的隨機 UUID 以支援更好的快取策略(此版本還將 uuidv4() 新增為 gen_rand_uuid 的別名)。
現在,在 PostgreSQL 18 中,您可以在使用非確定性排序規則的文字上執行 LIKE 比較,從而簡化更復雜的模式匹配。此外,此版本還引入了 CASEFOLD 以幫助進行不區分大小寫的匹配。
此版本還增加了時間約束,即範圍約束,用於使用 WITHOUT OVERLAPS 子句的 PRIMARY KEY 和 UNIQUE 約束,以及使用 PERIOD 子句的外部索引鍵約束。
PostgreSQL 18 引入了 oauth 認證,它允許使用者透過 PostgreSQL 擴充套件支援的 OAuth 2.0 機制進行身份驗證。此外,PostgreSQL 18 增加了一些功能來驗證和強制執行 FIPS 模式行為,並添加了 ssl_tls13_ciphers,允許使用者配置伺服器可以使用哪些 TLS v1.3 密碼套件。
此版本棄用了 md5 密碼認證,轉而使用 SCRAM 認證,SCRAM 認證於 PostgreSQL 10 中首次新增。md5 認證將在未來的主版本釋出中被完全移除。此外,PostgreSQL 18 在與 postgres_fdw 和 dblink 連線到遠端 PostgreSQL 例項時,增加了對 SCRAM 穿透認證的支援。
PostgreSQL 18 為 EXPLAIN 工具增加了更多細節,該工具提供有關查詢計劃執行的資訊,並且從這個版本開始,現在會自動顯示在執行 EXPLAIN ANALYZE 時訪問了多少個緩衝區(資料儲存的基本單位)。此外,EXPLAIN ANALYZE 現在顯示在索引掃描期間發生了多少次索引查詢,而 EXPLAIN ANALYZE VERBOSE 包括 CPU、WAL 和平均讀取統計資訊。此版本還在 pg_stat_all_tables 中包含了關於 vacuum 和 analyze 表的總耗時資訊,並現在顯示每個連線的 I/O 和 WAL 使用情況的統計資訊。
PostgreSQL 18 還提供了更多關於邏輯複製期間發生的寫衝突的洞察,並將此資訊同時記錄在日誌和 pg_stat_subscription_stats 檢視中。
從 PostgreSQL 18 開始,資料校驗和(用於驗證儲存資料的完整性)在新建立的 PostgreSQL 叢集上預設啟用。您可以使用 initdb --no-data-checksums 命令選擇停用此行為。請注意,這可能需要更改您的升級指令碼。
此外,在幾個約束功能方面也存在新的行為。首先,外部索引鍵約束和檢查約束都可以設定為 NOT ENFORCED,反之亦然,可以設定為可強制執行。此外,NOT NULL 約束現在會保留其名稱(符合 SQL 標準的要求),支援 NOT VALID 和 NO INHERIT 子句,並且在與繼承結合使用時行為更加一致。
pg_createsubscriber 現在支援 --all 標誌,因此您可以用一個命令為例項中的所有資料庫建立邏輯副本。此外,PostgreSQL 18 允許您使用 CREATE FOREIGN TABLE ... LIKE 命令,根據本地表的定義來建立外部表的模式定義。
PostgreSQL 18 還引入了新版本的 PostgreSQL 線協議 (3.2),這是自 PostgreSQL 7.4 (2003) 以來的第一個新協議版本。libpq 預設仍使用 3.0 版本,同時客戶端(如驅動程式、連線池、代理)正在增加對新協議版本的支援。
PostgreSQL 18 還增加了許多其他新功能和改進。其中許多功能可能對您的用例也很有幫助。請參閱 釋出說明 以獲取新功能和更改功能的完整列表。
https://postgres.tw/docs/18/release-18.html
每個 PostgreSQL 版本的穩定性在很大程度上取決於您,也就是社群,在 PostgreSQL 18 通用可用之前,使用您的工作負載和測試工具測試即將釋出的版本,以查詢錯誤和迴歸。由於這是 Beta 版,資料庫行為、功能細節和 API 仍可能發生微小更改。您的反饋和測試將有助於確定新功能的最終調整,因此請在不久的將來進行測試。使用者測試的質量決定了我們何時可以進行最終釋出。
一份 待辦事項列表已在 PostgreSQL Wiki 上公開。您可以使用 PostgreSQL 網站上的此表單 報告錯誤。
https://postgres.tw/account/submitbug/
這是 18 版本的第一個 Beta 版本。PostgreSQL 專案將在需要測試時釋出額外的 Beta 版本,隨後釋出一個或多個 Release Candidate 版本,直至 2025 年 9 月/10 月左右的最終釋出。有關更多資訊,請參閱 Beta 測試頁面。