PolarDB PostgreSQL版相容PostgreSQL 17的版本正式發布上線。PostgreSQL 17版本通過效能提升、營運簡化和功能擴充,進一步提升資料庫使用的體驗。
版本介紹
在社區PostgreSQL 17基礎上,PolarDB還支援一些專屬的功能,例如時空引擎GanosBase,全域計畫快取,GBK/GB18030 字元集等。在PolarDB PostgreSQL版 17的第一個發布版本中,即支援以下外掛程式:hll,log_fdw,mysql_fdw,pase,pg_bigm,pg_cron,pg_jieba,pg_repack,pg_similarity,pgtap,pgvector,pldebugger,prefix,varbitx,zhparser,ganos。
同時PolarDB進行了深入的效能最佳化,例如通過指令集最佳化(SIMD/原子操作)、系統級最佳化(PGO/BOLT/LTO)和IO效能最佳化等手段實現深入效能最佳化。
相關文檔:PostgreSQL 17社區發布公告。
發布時間
北京時間2025年4月3日
費用說明
支援訂用帳戶和隨用隨付兩種計費模式,可疊加計算包、儲存包使用,提供靈活的計費選擇。計費詳情請參見產品計費。
關鍵提升
系統級效能提升
Vacuum進程記憶體消耗最佳化:Vacuum進程對於PostgreSQL資料庫的健康運行至關重要,其執行需要消耗叢集資源。PostgreSQL 17引入新的Vacuum內部記憶體結構用於Vacuum操作,最高可以減少20倍記憶體消耗。不僅提高Vacuum的執行速度,還減少了對共用資源的使用,從而為工作負載騰出更多資源。
I/O層的效能最佳化:PostgreSQL 17改進WALTlog,高並發工作負載的寫入輸送量提升最多高達2倍。此外,新的流式I/O介面加快了順序掃描(讀取表中所有資料)和ANALYZE更新查詢規劃器統計資訊的速度。
查詢最佳化:PostgreSQL 17改進了使用B-tree索引(PostgreSQL中的預設索引方法)的
IN子句查詢的效能。此外,該版本支援並行構建BRIN索引。PostgreSQL 17引入多個查詢規劃方面的改進,包括對NOT NULL約束的最佳化以及對公用表運算式(WITH查詢)的改進。該版本增加了更多的SIMD(單指令/多資料)支援以加速計算,包括使用AVX-512加速bit_count函數。
開發人員體驗
PostgreSQL是第一個添加JSON支援的關係型資料庫(2012年),在PostgreSQL 17進一步完善SQL/JSON標準的實現。
引入JSON_TABLE,允許開發人員將JSON資料轉換為標準的PostgreSQL表。
支援SQL/JSON建構函式(
JSON,JSON_SCALAR,JSON_SERIALIZE)和查詢函數(JSON_EXISTS,JSON_QUERY,JSON_VALUE),為開發人員提供更多與JSON資料互動的方式。增加更多的 JSONPath運算式,重點是將JSON資料轉換為原生PostgreSQL資料類型,包括數值、布爾值、字串和日期/時間類型。
PostgreSQL 17為MERGE命令添加了更多功能,包括用於條件更新的
RETURNING子句和更新視圖的能力。PostgreSQL 17在批量載入和資料匯出方面增加了新功能,包括使用COPY命令匯出大行時效能提升高達2倍。當源編碼和目標編碼匹配時,
COPY效能也有所提升,並且引入一個新選項ON_ERROR,允許在插入錯誤時繼續匯入。PostgreSQL 17版本擴充了管理分區資料和分布在遠程PolarDB PostgreSQL版叢集上的資料的功能。該版本支援在分區表上使用身份列和排除約束。此外,PostgreSQL外部資料封裝器(postgres_fdw)支援將
EXISTS和IN子查詢下推到遠程伺服器以進行更高效的查詢處理。PostgreSQL 17支援一個內建的、跨平台的、保證不可變的定序提供者。該程式提供類似於
C定序的排序語義,但使用的是UTF-8編碼而非SQL_ASCII。通過使用這個新的定序提供者,可以確保無論PostgreSQL運行在哪,基於文本的查詢都能返回相同的排序結果。
邏輯複製增強
邏輯複製用於在許多情境下即時資料流式傳輸資料。在PostgreSQL 17版本之前,執行主要版本升級的使用者必須刪除邏輯複製槽,這需要在升級後重新同步訂閱者的資料。從該版本開始,使用者無需刪除邏輯複製槽,從而簡化使用邏輯複製時的升級過程。
PostgreSQL 17包含了對邏輯複製的故障切換控制,使其在高可用環境中更加可靠。此外,該版本引入pg_createsubscriber命令列工具,用於在使用物理複製的副本從庫上建立邏輯複製。
安全性和操作管理選項
PostgreSQL 17進一步擴充了使用者管理其資料庫系統整個生命週期的方式。PolarDB PostgreSQL版引入了一個新的TLS選項
sslnegotiation,允許使用者在使用ALPN時直接進行TLS握手(在ALPN目錄中註冊為postgresql)。PostgreSQL 17新增
pg_maintain預定義角色,該角色授予使用者執行維護操作的許可權。PostgreSQL 17的原生PostgreSQL備份工具
pg_basebackup支援增量備份,並添加pg_combinebackup工具重建完整備份。此外,pg_dump增加新選項--filter,允許在產生轉儲檔案時選擇要包含的對象。PostgreSQL 17還增強了監控和分析功能。
EXPLAIN現在支援顯示本地I/O塊讀取和寫入花費的時間,並包括兩個新選項:
SERIALIZE和MEMORY,用於查看網路傳輸的資料轉換所花費的時間以及使用了多少記憶體。支援查看索引清理的進度,並添加
pg_wait_events系統檢視表,結合pg_stat_activity視圖可以更深入瞭解活動會話等待原因。
升級指導
建議您升級到PolarDB PostgreSQL版 17版本。升級到PolarDB PostgreSQL版相容PostgreSQL 17版本意味著您可以與PostgreSQL社區保持同步,獲得更多的資源和支援,協助您解決問題並學習資料庫的最佳實務。
在PolarDB PostgreSQL版 16版本升級到PolarDB PostgreSQL版 17版本的過程中,大部分的資料類型、內建函數、表列和對象無明顯變化,大多數為細節改進。通過邏輯複製等方式(推薦使用DTS工具進行PolarDB PostgreSQL版間的遷移)可以實現接近100%的相容性,具體的變化細節如下所示。
此處僅為PolarDB PostgreSQL版 17版本與PolarDB PostgreSQL版 16版本區別。其他PolarDB PostgreSQL版版本升級到PolarDB PostgreSQL版 16中的區別,請參見PostgreSQL 16與PostgreSQL 15區別和PostgreSQL 15與PostgreSQL 14區別。
類型
限制
ago只出現在INTERVAL值的末尾。禁止空INTERVAL單位多次出現。
視圖
更新
pgrowlocks鎖模式輸出標籤。將Share改為For Share,Key Share改為For Key Share。更新兩個WAL檔案名稱函數的檔案邊界處理。
pg_walfile_name()和pg_walfile_name_offset()函數在PostgreSQL 17之前版本對位於檔案邊界的LSN返回前一個段號,PostgreSQL 17版本返回當前段號。刪除
information_schema的element_types.domain_default欄位。重新命名
pg_stat_statements的I/O塊讀寫時間統計列。blk_read_time改為shared_blk_read_time,blk_write_time改為shared_blk_write_time。更新統計目標列的預設值表示方式。
pg_attribute.attstattarget和pg_statistic_ext.stxstattarget用NULL表示預設統計目標。重新命名本地化相關列名。
pg_collation.colliculocale改為colllocale,pg_database.daticulocale改為datlocale。重構VACUUM進度統計列。
max_dead_tuples改為max_dead_tuple_bytes,num_dead_tuples改為num_dead_item_ids,新增dead_tuple_bytes欄位。重新命名SLRU相關統計視圖列。
pg_stat_slru視圖列及pg_stat_reset_slru()參數名同步變更。
函數與運算式
在維護操作中使用安全Search_path的函數變更,防止維護操作(如ANALYZE、CLUSTER、CREATE INDEX、CREATE MATERIALIZED VIEW、REFRESH MATERIALIZED VIEW、REINDEX或VACUUM)執行不安全訪問。對於引用非預設Schema的運算式索引和物化視圖所使用的函數,必須在建立函數時明確指定Search_path。
許可權
更新SET SESSION AUTHORIZATION對初始會話使用者超級許可權的處理。新行為基於執行SET SESSION AUTHORIZATION命令時會話使用者的超級許可權狀態,而非串連時的狀態。
移除類比按資料庫使用者的功能(
db_user_namespace特性,極少被使用)。
其他
移除伺服器參數
old_snapshot_threshold。該參數允許Vacuum移除可能仍對運行中事務可見的行,若後續訪問會導致snapshot too old錯誤。移除
adminpack擴充。該擴充已被終止支援的pgAdmin III使用。移除伺服器參數
trace_recovery_messages。