PostgreSQL Global Development Group 宣布 PostgreSQL 17 的第一個 Beta 版本現在可供下載。此版本包含 PostgreSQL 17 正式發布時將提供的所有功能的預覽,儘管發布的一些細節可能會在 Beta 期間發生變化。
您可以在發布說明中找到有關 PostgreSQL 17 的所有功能和變更的資訊
https://postgres.tw/docs/17/release-17.html
秉持開源 PostgreSQL 社群的精神,我們強烈建議您在您的系統上測試 PostgreSQL 17 的新功能,以幫助我們消除可能存在的錯誤或其他問題。雖然我們不建議您在生產環境中運行 PostgreSQL 17 Beta 1,但我們鼓勵您找到方法針對此 Beta 版本運行典型的應用程式工作負載。
您的測試和回饋將幫助社群確保 PostgreSQL 17 版本維持我們提供世界上最先進的開源關聯式資料庫之穩定、可靠版本的標準。請閱讀更多關於我們的Beta 測試流程以及您如何貢獻
https://postgres.tw/developer/beta/
PostgreSQL 17 基於最近的版本,並繼續提高整個系統的效能。Vacuum,負責回收儲存空間的 PostgreSQL 進程,具有新的內部資料結構,已顯示高達 20 倍的記憶體減少,以及完成其工作的整體時間的改進。此外,vacuum 進程不再對其可以使用的記憶體量有 1GB
的限制(由 maintenance_work_mem
控制),讓您可以選擇將更多資源應用於 vacuum。
此版本引入了流 I/O 的介面,並且可以在執行循序掃描和運行 ANALYZE
時顯示效能改進。PostgreSQL 17 還包括可以控制 交易、子交易和 multixact 緩衝區可擴展性的配置參數。
PostgreSQL 17 現在可以使用規劃器統計資訊和 通用表格運算式 (WITH
查詢) 的排序順序,以進一步最佳化這些查詢並幫助它們更快地執行。此外,此版本顯著提高了使用 IN
子句和 B 樹索引的查詢的執行時間。從此版本開始,PostgreSQL 可以從具有 NOT NULL
約束的列的執行中刪除多餘的 IS NOT NULL
語句,並且不再需要在包含 IS NULL
子句的 IS NOT NULL
列上執行查詢。現在從 PostgreSQL 17 開始,您可以對 BRIN 索引使用並行索引建立。
具有高度並發變更的工作負載可以從 PostgreSQL 17 中受益,因為 預寫日誌 (WAL) 鎖的管理的改進,一些測試顯示高達 2 倍的效能提升。
最後,PostgreSQL 17 添加了更明確的 SIMD 指令,包括對 bit_count
函數的 AVX-512 支援。
PostgreSQL 17 為分割管理帶來了更大的靈活性,添加了分割區分割和合併的能力,並添加了對識別欄位和排除約束的分割表支援。此外,PostgreSQL 外部資料包裝器 (postgres_fdw
) 可以從具有 EXISTS
和 IN
子查詢的查詢中實現效能優勢,因為這些查詢現在可以下推到遠端伺服器。
PostgreSQL 17 為邏輯複寫添加了新功能,使其更易於在高可用性工作負載和升級中使用。從 PostgreSQL 17 升級到更新版本開始,在使用 pg_upgrade
時,您不再需要刪除 邏輯複寫槽,從而避免在升級後重新同步資料。此外,此版本還引入了邏輯複寫的容錯移轉控制,為在高可用性環境中管理 PostgreSQL 資料庫提供了更多控制。PostgreSQL 17 還允許邏輯複寫訂閱者使用 hash
索引進行查找,並引入了 pg_createsubscriber
命令列工具,用於在使用實體複寫的複本上添加邏輯複寫。
PostgreSQL 17 繼續建立在 SQL/JSON 標準之上,添加了對 JSON_TABLE
功能的支援,該功能可以將 JSON 轉換為標準 PostgreSQL 表,以及 SQL/JSON 建構函式(JSON
、JSON_SCALAR
、JSON_SERIALIZE
)和查詢函數(JSON_EXISTS
、JSON_QUERY
、JSON_VALUE
)。值得注意的是,這些功能最初計劃用於 PostgreSQL 15 版本,但在 Beta 期間由於設計考慮而被還原,這也是我們要求您在 Beta 期間幫助我們測試功能的原因之一!此外,PostgreSQL 17 為其 jsonpath
實作添加了更多功能,以及將 JSON 值轉換為不同資料類型的能力。
MERGE
命令現在支援 RETURNING
子句,讓您可以進一步處理修改後的列。您還可以通過使用新的 merge_action
函數查看 MERGE
命令的哪個部分修改了該列。PostgreSQL 17 還允許您使用 MERGE
命令更新視圖,並添加了 WHEN NOT MATCHED BY SOURCE
子句,以便在來源列不符合條件時提供行為。
COPY
用於有效地批量載入和匯出 PostgreSQL 中的資料,現在使用 PostgreSQL 17 時,您在匯出大型列時可能會看到高達 2 倍的效能提升。此外,當來源編碼與目標編碼匹配時,COPY
的效能得到了提高,並且有一個新的選項 ON_ERROR
,即使在插入列時發生錯誤,也可以讓複製繼續進行。PostgreSQL 17 還為 非同步和更安全的查詢取消例程提供了更好的支援,驅動程式可以使用 libpq API 採用這些例程。
PostgreSQL 17 包含一個內建的定序提供者,它提供了與 C
定序類似的排序語義,但使用 UTF-8
編碼而不是 SQL_ASCII
。保證這個新的定序是不可變的,確保您的排序的傳回值不會因為您的 PostgreSQL 安裝運行的系統而改變。
PostgreSQL 17 新增了一個連線參數 sslnegotiation
,允許 PostgreSQL 在使用 ALPN 時執行直接 TLS 握手,從而減少一次網路往返。 PostgreSQL 已在 ALPN 目錄中註冊為 postgresql
。
此版本引入了在驗證期間執行的事件觸發器,並且 libpq 中包含一個名為 PQchangePassword
的新 API,可在客戶端自動雜湊密碼,以防止伺服器中意外記錄純文字密碼。
PostgreSQL 17 新增了一個名為 pg_maintain
的新 預定義角色,授予使用者在所有關係上執行 VACUUM
、ANALYZE
、CLUSTER
、REFRESH MATERIALIZED VIEW
、REINDEX
和 LOCK TABLE
的權限。 此版本還確保 search_path
對於 VACUUM
、ANALYZE
、CLUSTER
、REFRESH MATERIALIZED VIEW
和 INDEX
等維護操作是安全的。 最後,使用者現在可以使用 ALTER SYSTEM
來設定無法識別的自定義伺服器變數的值。
PostgreSQL 17 引入了使用 pg_basebackup
執行增量備份的功能,並新增了一個名為 pg_combinebackup
的新工具,用作備份恢復過程的一部分。 此版本為 pg_dump
新增了一個名為 --filter
的標誌,讓您可以指定一個檔案,其中包含關於要在 dump 中包含/排除哪些物件的指示。
提供查詢計畫和執行資訊的 EXPLAIN
命令新增了兩個新選項:SERIALIZE
,顯示轉換資料以進行網路傳輸所花費的時間,以及 MEMORY
,報告最佳化器的記憶體使用量。 此外,EXPLAIN
現在可以顯示用於 I/O 區塊讀取和寫入的時間。
PostgreSQL 17 在 pg_stat_statements
中標準化了 CALL
的參數,減少了頻繁調用的預存程序條目數量。 此外,VACUUM
進度報告 現在顯示 vacuuming 索引的進度。 PostgreSQL 17 還引入了一個新視窗 pg_wait_events
,提供有關等待事件的描述,並且可以與 pg_stat_activity
結合使用,以更深入地了解活動會話正在等待的原因。 此外,pg_stat_bgwriter
視窗中的一些資訊現在被拆分到新的 pg_stat_checkpointer
視窗中。
PostgreSQL 17 添加了許多其他新功能和改進。 其中許多功能可能對您的用例也有幫助。 請參閱 發行說明,以取得新功能和變更功能的完整清單。
https://postgres.tw/docs/17/release-17.html
每個 PostgreSQL 版本的穩定性都很大程度上取決於您,社群,使用您的工作負載和測試工具來測試即將推出的版本,以便在 PostgreSQL 17 正式發布之前找到錯誤和迴歸。 由於這是一個 Beta 版本,因此資料庫行為、功能細節和 API 仍有可能進行細微變更。 您的回饋和測試將有助於確定新功能的最終調整,因此請在不久的將來進行測試。 使用者測試的品質有助於確定我們何時可以發布最終版本。
未解決問題的清單可在 PostgreSQL Wiki 中公開取得。 您可以使用 PostgreSQL 網站上的此表單報告錯誤
https://postgres.tw/account/submitbug/
這是 17 版的第一個 Beta 版本。 PostgreSQL 專案將根據測試需要發布其他 Beta 版本,然後發布一個或多個候選發布版本,直到 2024 年 9 月/10 月左右的最終發布版本。 欲了解更多資訊,請參閱Beta 測試頁面。