全部產品
Search
文件中心

PolarDB:【新版本】PolarDB PostgreSQL版 16版本正式發布上線

更新時間:Mar 29, 2025

PolarDB PostgreSQL版相容PostgreSQL 16的版本正式發布上線。PostgreSQL 16版本在效能方面有顯著提升,尤其在並行查詢、巨量資料量載入和邏輯複製等情境有重要改進。該版本為開發人員和管理員提供了許多新功能,包括更多的SQL/JSON文法,新的工作負載監控指標以及定義更靈活的叢集間存取控制規則。

版本介紹

在社區PostgreSQL 16基礎上,PolarDB還支援一些專屬的功能,例如時空引擎GanosBase、全域計畫快取以及GBK/GB18030字元集等。在PolarDB PostgreSQL版 16的第一個發布版本中,即支援以下外掛程式:hllhypopglog_fdwpasepg_bigmpg_cronpg_jiebapg_repackpg_similaritypgtappgvectorpldebuggerprefixroaringbitmaprumvarbitxzhparserganos

同時,PolarDB進行了深入的效能最佳化,例如通過指令集最佳化(SIMD/原子操作)、系統級最佳化(PGO/BOLT/LTO)和IO效能最佳化等手段實現深入效能最佳化。

說明

相關文檔:PostgreSQL 16社區發布公告

發布時間

北京時間2024年9月18日

費用說明

支援訂用帳戶和隨用隨付兩種計費模式,可疊加計算包、儲存包使用,提供靈活的計費選擇。計費詳情請參見產品計費

關鍵提升

效能提升

PostgreSQL 16引入新的查詢規劃器,提升現有PostgreSQL功能的效能。

  • 支援並存執行FULLRIGHT串連。

  • 為彙總函式(包含DISTINCTORDER BY子句)查詢產生更優的執行計畫。

  • 支援使用增量排序處理SELECT DISTINCT查詢。

  • 最佳化視窗函數,使相關查詢執行更加高效。

  • 改進RIGHTOUTER“反串連(anti-joins)”,支援識別出不在已串連表中的資料行。

該版本對使用COPY進行批量載入的單一和並行作業進行改進,測試顯示在某些情況下效能提升高達300%。PostgreSQL 16增加了對使用libpq的用戶端的負載平衡支援。改進Vacuum策略,減少全表凍結的必要性。此外,PostgreSQL 16引入了在x86和ARM架構上使用SIMD進行CPU加速,從而在處理ASCII和JSON字串以及執行數組和子事務搜尋時,提升效能。

邏輯複製

邏輯複製支援將資料流複製到其他可以解析PostgreSQL邏輯複製協議的節點或訂閱者。PostgreSQL 16支援從Standby節點執行邏輯複製,即Standby節點可以將邏輯變更發布到其他伺服器。這為開發人員提供了新的工作負載分布選項,例如,使用Standby節點取代高負載主節點,通過邏輯複製將資料變更應用到下級訂閱端。

此外,PostgreSQL 16對邏輯複製還進行多項效能改進。訂閱者可以使用並行方式處理大型事務。對於沒有主鍵的表,訂閱者可以使用B-tree索引代替順序掃描尋找行。在某些條件下,您還可以使用二進位格式加速初始表同步。

改進PostgreSQL 16邏輯複製的存取控制,新增預定義角色 pg_create_subscription,該角色允許使用者建立邏輯訂閱。

PostgreSQL 16支援雙向邏輯複製功能,可以在兩個不同發行者的表之間進行資料複製。

開發人員體驗

PostgreSQL 16引入更多SQL/JSON標準文法,包括建構函式和謂詞,例如JSON_ARRAY()JSON_ARRAYAGG()IS JSON。該版本允許使用底線作為千位分隔字元(如5_432_000),並支援非十進位整數常量(如0x15380o124700b1010100111000)。

PostgreSQL 16為開發人員提供更多psql命令,包括\bind,該命令允許使用者使用帶參數的查詢,並使用 \bind 來代替變數(例如 SELECT $1::int + $2::int \bind 1 2 \g)。

PostgreSQL 16改進文本定序(text collations)。該版本構建(Build)時預設啟用ICU(國際化組件),並從系統內容中確定預設的ICU地區設定,允許自訂ICU定序。

監控

理解I/O操作對系統的影響是最佳化資料庫工作負載效能的一個關鍵方面。PostgreSQL 16引入了一項與I/O操作相關的關鍵性新指標pg_stat_io,用於詳細分析I/O訪問模式。

此外,該版本在pg_stat_all_tables視圖中添加了一個新欄位,該欄位記錄了最後一次掃描表或索引的時間戳記。PostgreSQL 16通過記錄語句中傳入的參數值,提升auto_explain的可讀性,以及pg_stat_statementspg_stat_activity使用查詢跟蹤演算法的準確性。

存取控制與安全性

PostgreSQL 16提供更精細的存取控制選項,並增強相關安全功能。該版本改進pg_hba.confpg_ident.conf的管理,包括允許使用Regex匹配使用者和資料庫名稱,並支援使用include指令來引入外部設定檔。

該版本新增有關安全性的用戶端串連參數,具體參數如下:

  • require_auth:允許用戶端指定可接受的來自伺服器端的身分識別驗證參數。

  • sslrootcert="system":表示PostgreSQL將使用用戶端作業系統提供的可信認證(CA)。

此外,該版本新增對Kerberos信任委託的支援,允許postgres_fdwdblink類似外掛程式使用經過身分識別驗證的憑證串連到受信任的服務。

升級指導

建議您升級到PolarDB PostgreSQL版 16版本。升級到PolarDB PostgreSQL版相容PostgreSQL 16版本意味著您可以與PostgreSQL社區保持同步,獲得更多的資源和支援,協助您解決問題並學習資料庫的最佳實務。

PolarDB PostgreSQL版 15版本升級到PolarDB PostgreSQL版 16版本的過程中,大部分的資料類型、內建函數、表列和對象無明顯變化,大多數為細節改進。通過邏輯複製等方式(推薦使用DTS工具進行PolarDB PostgreSQL版間的遷移)可以實現接近100%的相容性,具體的變化細節如下所示。

說明

此處僅為PolarDB PostgreSQL版 15版本與PolarDB PostgreSQL版 16版本區別。其他PolarDB PostgreSQL版版本升級到PolarDB PostgreSQL版 15中的區別,請參見PostgreSQL 15與PostgreSQL 14區別

類型

禁止主鍵使用NULLS NOT DISTINCT索引。

函數與運算式

  • 更新PL/pgSQL綁定遊標變數的分配規則:在PostgreSQL 16之前,此類變數的字串值在遊標分配期間被設定為與變數名稱相匹配的值。然而,在該版本中該值將在OPEN期間進行分配,並且將不再與變數名稱相匹配。若需恢複以往的行為,請在OPEN之前將所需的portal名稱分配給遊標變數。

  • 刪除pg_walinspect函數:pg_get_wal_records_info_till_end_of_wal()pg_get_wal_stats_till_end_of_wal()

  • 收緊對繼承表/分區表的GENERATED運算式限制:父表和子表的列必須具備相同的產生狀態,但現在實際的產生運算式可以不同。

  • REINDEX DATABASE和reindexdb不再處理系統資料表索引:可使用REINDEX SYSTEM和reindexdb --system來處理此類索引。

  • 刪除使用ON SELECT規則手動建立視圖的功能。

許可權

  • WITH INHERIT子句覆蓋:該機制允許繼承某些角色,同時不繼承其他角色,因為成員的繼承狀態是在GRANT時設定的。此前,成員角色的繼承狀態僅受到角色自身的繼承狀態的影響,對角色繼承狀態的更改將影響所有之前和未來的成員角色。

  • 限制CREATEROLE的許可權及其修改其他角色的能力:在PostgreSQL 16之前,具有CREATEROLE許可權的角色可以更改任何非超級使用者角色的許多許可權。此類操作(包括新增成員)在該版本要求請求更改的角色具有ADMIN OPTION許可權。例如,現在只有在擁有ADMIN OPTION許可權的情況下才能更改CREATEDB、REPLICATION和BYPASSRLS屬性。

其他

  • 刪除唯讀參數lc_collatelc_ctype

  • 刪除參數boost_trigger_file

  • 刪除參數vacuum_defer_cleanup_age

  • 重新命名參數force_parallel_modedebug_parallel_query