PolarDB PostgreSQL版相容PostgreSQL 16的版本正式發布上線。PostgreSQL 16版本在效能方面有顯著提升,尤其在並行查詢、巨量資料量載入和邏輯複製等情境有重要改進。該版本為開發人員和管理員提供了許多新功能,包括更多的SQL/JSON文法,新的工作負載監控指標以及定義更靈活的叢集間存取控制規則。
版本介紹
在社區PostgreSQL 16基礎上,PolarDB還支援一些專屬的功能,例如時空引擎GanosBase、全域計畫快取以及GBK/GB18030字元集等。在PolarDB PostgreSQL版 16的第一個發布版本中,即支援以下外掛程式:hll、hypopg、log_fdw、pase、pg_bigm、pg_cron、pg_jieba、pg_repack、pg_similarity、pgtap、pgvector、pldebugger、prefix、roaringbitmap、rum、varbitx、zhparser、ganos。
同時,PolarDB進行了深入的效能最佳化,例如通過指令集最佳化(SIMD/原子操作)、系統級最佳化(PGO/BOLT/LTO)和IO效能最佳化等手段實現深入效能最佳化。
相關文檔:PostgreSQL 16社區發布公告。
發布時間
北京時間2024年9月18日
費用說明
支援訂用帳戶和隨用隨付兩種計費模式,可疊加計算包、儲存包使用,提供靈活的計費選擇。計費詳情請參見產品計費。
關鍵提升
效能提升
PostgreSQL 16引入新的查詢規劃器,提升現有PostgreSQL功能的效能。
支援並存執行
FULL和RIGHT串連。為彙總函式(包含
DISTINCT或ORDER BY子句)查詢產生更優的執行計畫。支援使用增量排序處理SELECT DISTINCT查詢。
最佳化視窗函數,使相關查詢執行更加高效。
改進
RIGHT和OUTER“反串連(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),並支援非十進位整數常量(如0x1538、0o12470和0b1010100111000)。
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_statements和pg_stat_activity使用查詢跟蹤演算法的準確性。
存取控制與安全性
PostgreSQL 16提供更精細的存取控制選項,並增強相關安全功能。該版本改進pg_hba.conf和pg_ident.conf的管理,包括允許使用Regex匹配使用者和資料庫名稱,並支援使用include指令來引入外部設定檔。
該版本新增有關安全性的用戶端串連參數,具體參數如下:
require_auth:允許用戶端指定可接受的來自伺服器端的身分識別驗證參數。sslrootcert="system":表示PostgreSQL將使用用戶端作業系統提供的可信認證(CA)。
此外,該版本新增對Kerberos信任委託的支援,允許postgres_fdw和dblink類似外掛程式使用經過身分識別驗證的憑證串連到受信任的服務。
升級指導
建議您升級到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_collate和lc_ctype。刪除參數
boost_trigger_file。刪除參數
vacuum_defer_cleanup_age。重新命名參數
force_parallel_mode為debug_parallel_query。