2025年9月25日: PostgreSQL 18 釋出!
支援版本:當前 (18)

E.1. 釋出18 #

釋出日期:2025-09-25

E.1.1. 概述 #

PostgreSQL 18 包含許多新特性和增強功能,包括

  • 非同步 I/O (AIO) 子系統,可以提高順序掃描、點陣圖堆掃描、清理和其他操作的效能。

  • pg_upgrade 現在保留最佳化器統計資訊。

  • 支援“跳過掃描”查詢,允許在更多情況下使用多列 B 樹索引

  • 用於生成按時間戳排序的 UUIDuuidv7() 函式。

  • 虛擬生成列,它們在讀操作期間計算其值。這現在是生成列的預設設定。

  • OAuth 認證支援。

  • INSERTUPDATEDELETEMERGE 命令的 RETURNING 子句中支援 OLDNEW

  • 對於 PRIMARY KEYUNIQUEFOREIGN KEY 約束的時間約束或範圍約束。

下面幾節將更詳細地解釋上述專案以及 PostgreSQL 18 的其他新特性。

E.1.2. 遷移到版本18 #

對於希望從任何以前的版本遷移資料的人來說,需要使用 pg_dumpall 進行轉儲/恢復,或者使用 pg_upgrade 或邏輯複製。有關遷移到新主要版本的通用資訊,請參閱 第 18.6 節

版本18包含許多可能影響與以前版本相容性的更改。請注意以下不相容性

  • initdb 預設更改為啟用資料校驗和(Greg Sabino Mullane) §

    可以使用新的 initdb 選項 --no-data-checksums 停用校驗和。pg_upgrade 要求匹配叢集校驗和設定,因此這個新選項對於升級不帶校驗和的舊叢集很有用。

  • 更改時區縮寫處理(Tom Lane) §

    系統現在將優先考慮當前會話的時區縮寫,然後檢查伺服器變數 timezone_abbreviations。以前是先檢查 timezone_abbreviations

  • 棄用 MD5 密碼認證(Nathan Bossart) §

    對 MD5 密碼的支援將在未來的主要版本中移除。CREATE ROLEALTER ROLE 現在在設定 MD5 密碼時會發出棄用警告。可以透過將 md5_password_warnings 引數設定為 off 來停用這些警告。

  • 更改 VACUUMANALYZE 以處理父表的繼承子表(Michael Harris) §

    可以使用新的 ONLY 選項執行以前的行為。

  • 防止 COPY FROM 在讀取檔案時將 \. 視為檔案結束標記CSV檔案(Daniel Vérité, Tom Lane) § §

    psql 在從 STDIN 讀取檔案時仍會將 \. 視為檔案結束標記。CSV較舊的 psql 客戶端連線到 PostgreSQL 18 伺服器可能會遇到 \copy 問題。此版本還強制要求 \. 必須單獨出現在一行中。

  • 禁止未記錄的分割槽表(Michael Paquier) §

    以前 ALTER TABLE SET [UN]LOGGED 不執行任何操作,並且建立未記錄的分割槽表也不會導致其子表未記錄。

  • 在觸發器事件排隊時處於活動狀態的角色執行 AFTER 觸發器(Laurenz Albe) §

    以前,此類觸發器在觸發器執行時(例如,在 COMMIT 時)處於活動狀態的角色執行。這對於在排隊時間和事務提交之間角色發生變化的情況很重要。

  • 移除 GRANT/REVOKE 中規則許可權的非功能性支援(Fujii Masao) §

    PostgreSQL 8.2 以來,這些功能一直是非功能性的。

  • 移除列 pg_backend_memory_contexts.parent(Melih Mutlu) §

    由於添加了 pg_backend_memory_contexts.path,不再需要此功能。

  • pg_backend_memory_contexts.levelpg_log_backend_memory_contexts() 更改為從1開始(Melih Mutlu, Atsushi Torikoshi, David Rowley, Fujii Masao) § § §

    這些以前是從零開始的。

  • 更改 全文搜尋 以使用叢集的預設排序規則提供程式來讀取配置檔案和字典,而不是始終使用 libc(Peter Eisentraut) §

    預設使用非 libc 排序規則提供程式(例如 ICU,內建)的叢集,對於 LC_CTYPE 處理的字元,其行為可能與 libc 不同,可能會在某些全文搜尋函式以及 pg_trgm 擴充套件的行為中觀察到變化。使用 pg_upgrade 升級此類叢集時,建議在升級後重新索引所有與全文搜尋和 pg_trgm 相關的索引。

E.1.3. 變更 #

下面您將找到 PostgreSQL 18 與以前主要版本之間變化的詳細說明。

E.1.3.1. 伺服器 #

E.1.3.1.1. 最佳化器 #
  • 自動刪除一些不必要的表自連線(Andrey Lepikhov, Alexander Kuzmenkov, Alexander Korotkov, Alena Rybakina) §

    可以使用伺服器變數 enable_self_join_elimination 停用此最佳化。

  • 將一些 IN (VALUES ...) 轉換為 x = ANY ... 以獲得更好的最佳化器統計資訊(Alena Rybakina, Andrei Lepikhov) §

  • 允許將 OR 子句轉換為陣列以加快索引處理(Alexander Korotkov, Andrey Lepikhov) §

  • 加快 INTERSECTEXCEPT視窗聚合檢視列別名的處理速度(Tom Lane, David Rowley) § § § §

  • 允許 SELECT DISTINCT 的鍵在內部重新排序以避免排序(Richard Guo) §

    可以使用 enable_distinct_reordering 停用此最佳化。

  • 忽略功能上依賴於其他列的 GROUP BY 列(Zhang Mingli, Jian He, David Rowley) §

    如果 GROUP BY 子句包含唯一索引的所有列以及同一表的其他列,則這些其他列是冗餘的,可以從分組中刪除。對於非延遲主鍵,這已經成立。

  • 允許將 HAVING 子句中某些 GROUPING SETS 推送到 WHERE 子句(Richard Guo) § § § §

    這允許更早地進行行過濾。此版本還修復了一些以前返回不正確結果的 GROUPING SETS 查詢。

  • 改進使用 numerictimestamp 值的 generate_series() 的行估計(David Rowley, Song Jinzhou) § §

  • 允許最佳化器使用 Right Semi Join 計劃(Richard Guo) §

    半連線用於查詢是否存在至少一個匹配項。

  • 允許合併連線使用 增量排序(Richard Guo) §

  • 提高訪問多個分割槽的查詢規劃效率(Ashutosh Bapat, Yuya Watari, David Rowley) § §

  • 在更多情況下允許 分割槽式連線,並減少其記憶體使用(Richard Guo, Tom Lane, Ashutosh Bapat) § §

  • 改進分割槽查詢的成本估算(Nikita Malakhov, Andrei Lepikhov) §

  • 改進 SQL 語言函式計劃快取(Alexander Pyhalov, Tom Lane) § §

  • 改進停用最佳化器功能的處理(Robert Haas) §

E.1.3.1.2. 索引 #
  • 允許 btree 索引的跳過掃描(Peter Geoghegan) § §

    這允許在更多情況下使用多列 B 樹索引,例如當對第一個或早期索引列沒有限制(或存在非相等限制)時,並且對後續索引列存在有用限制。

  • 允許非 B 樹唯一索引用作分割槽鍵和物化檢視(Mark Dilger) § §

    索引型別仍必須支援相等性。

  • 允許並行建立 GIN 索引(Tomas Vondra, Matthias van de Meent) §

  • 允許對值進行排序以加快範圍型別 GiSTbtree 索引構建(Bernd Helmle) §

E.1.3.1.3. 總體效能 #
  • 新增非同步 I/O 子系統(Andres Freund, Thomas Munro, Nazir Bilal Yavuz, Melanie Plageman) § § § § § § § § § § §

    此功能允許後端排隊多個讀取請求,從而實現更高效的順序掃描、點陣圖堆掃描、清理等。這由伺服器變數 io_method 啟用,並添加了伺服器變數 io_combine_limitio_max_combine_limit 來控制它。這還使得對於不支援 fadvise() 的系統,effective_io_concurrencymaintenance_io_concurrency 的值大於零成為可能。新的系統檢視 pg_aios 顯示用於非同步 I/O 的檔案控制代碼。

  • 改進訪問許多關係查詢的鎖定效能(Tomas Vondra) §

  • 提高雜湊連線和 GROUP BY 的效能並減少記憶體使用(David Rowley, Jeff Davis) § § § § §

    這也改進了 EXCEPT 使用的雜湊集操作和子計劃值的雜湊查詢。

  • 允許普通清理凍結某些頁面,即使它們都是可見的(Melanie Plageman) § §

    這減少了後期全關係凍結的開銷。其激進性可以透過伺服器變數和每表設定 vacuum_max_eager_freeze_failure_rate 控制。以前,在需要凍結之前,清理從不處理所有可見頁面。

  • 新增伺服器變數 vacuum_truncate 以控制 VACUUM 期間的檔案截斷(Nathan Bossart, Gurjeet Singh) §

    已經存在一個具有相同名稱和行為的儲存級別引數。

  • 將伺服器變數 effective_io_concurrencymaintenance_io_concurrency 的預設值增加到 16(Melanie Plageman) § §

    這更準確地反映了現代硬體。

E.1.3.1.4. 監控 #
  • 增加伺服器變數 log_connections 的日誌記錄粒度(Melanie Plageman) §

    此伺服器變數以前僅為布林值,現在仍支援。

  • 新增 log_connections 選項以報告連線階段的持續時間(Melanie Plageman) §

  • 新增 log_line_prefix 轉義 %L 以輸出客戶端IP地址(Greg Sabino Mullane) §

  • 新增伺服器變數 log_lock_failures 以記錄鎖獲取失敗(Yuki Seino, Fujii Masao) § §

    具體來說,它報告 SELECT ... NOWAIT 鎖失敗。

  • 修改 pg_stat_all_tables 及其變體以報告在 VACUUMANALYZE 及其自動變體中花費的時間(Sami Imseih) §

    新列是 total_vacuum_timetotal_autovacuum_timetotal_analyze_timetotal_autoanalyze_time

  • VACUUMANALYZE 新增延遲時間報告(Bertrand Drouvot, Nathan Bossart) § §

    此資訊出現在伺服器日誌、系統檢視 pg_stat_progress_vacuumpg_stat_progress_analyze 以及 VERBOSE 模式下的 VACUUMANALYZE 的輸出中;必須使用伺服器變數 track_cost_delay_timing 啟用跟蹤。

  • 新增WAL, CPU以及平均讀取統計資訊輸出到 ANALYZE VERBOSE(Anthonin Bonnefoy) § §

  • 新增完整WAL緩衝區計數到 VACUUM/ANALYZE (VERBOSE) 和 autovacuum 日誌輸出(Bertrand Drouvot) §

  • 新增每後端 I/O 統計資訊報告(Bertrand Drouvot) § §

    統計資訊透過 pg_stat_get_backend_io() 訪問。每後端 I/O 統計資訊可以透過 pg_stat_reset_backend_stats() 清除。

  • 新增 pg_stat_io 列以位元組報告 I/O 活動(Nazir Bilal Yavuz) §

    新列是 read_byteswrite_bytesextend_bytesop_bytes 列(始終等於 BLCKSZ)已移除。

  • 新增WALpg_stat_io 的 I/O 活動行(Nazir Bilal Yavuz, Bertrand Drouvot, Michael Paquier) § § §

    這包括WAL接收器活動以及此類寫入的等待事件。

  • 更改伺服器變數 track_wal_io_timing 以控制跟蹤WALpg_stat_io 中的時間而不是 pg_stat_wal(Bertrand Drouvot) §

  • pg_stat_wal 中移除讀/同步列(Bertrand Drouvot) § §

    這會移除列 wal_writewal_syncwal_write_timewal_sync_time

  • 新增函式 pg_stat_get_backend_wal() 以返回每後端WAL統計資訊(Bertrand Drouvot) §

    每後端WAL統計資訊可以透過 pg_stat_reset_backend_stats() 清除。

  • 新增函式 pg_ls_summariesdir() 以專門列出 PGDATA/pg_wal/summaries 的內容(Yushi Ogiwara) §

  • 新增列 pg_stat_checkpointer.num_done 以報告已完成的檢查點數量(Anton A. Melnikov) §

    num_timednum_requested 同時計算已完成和已跳過的檢查點。

  • 新增列 pg_stat_checkpointer.slru_written 以報告SLRU寫入的緩衝區(Nitin Jadhav) §

    此外,修改檢查點伺服器日誌訊息以報告單獨的共享緩衝區和SLRU緩衝區值。

  • 新增列到 pg_stat_database 以報告並行工作者活動(Benoit Lobréau) §

    新列是 parallel_workers_to_launchparallel_workers_launched

  • 讓常量列表的 查詢 ID 計算只考慮第一個和最後一個常量(Dmitry Dolgov, Sami Imseih) § § §

    洗牌由 pg_stat_statements 使用。

  • 調整查詢 ID 計算以將使用相同關係名稱的查詢組合在一起(Michael Paquier, Sami Imseih) §

    即使不同模式中的表具有不同的列名,這也是成立的。

  • 新增列 pg_backend_memory_contexts.type 以報告記憶體上下文的型別(David Rowley) §

  • 新增列 pg_backend_memory_contexts.path 以顯示記憶體上下文父級(Melih Mutlu) §

E.1.3.1.5. 許可權 #
E.1.3.1.6. 伺服器配置 #
  • 新增對 OAuth 認證方法的支援(Jacob Champion, Daniel Gustafsson, Thomas Munro) §

    這向 pg_hba.conf 添加了 oauth 認證方法、libpq OAuth 選項、一個用於載入令牌驗證庫的伺服器變數 oauth_validator_libraries,以及一個 --with-libcurl 配置標誌以新增所需的編譯時庫。

  • 新增伺服器變數 ssl_tls13_ciphers 以允許指定多個以冒號分隔的 TLSv1.3 密碼套件(Erica Zhang, Daniel Gustafsson) §

  • 將伺服器變數 ssl_groups 的預設值更改為包含橢圓曲線 X25519(Daniel Gustafsson, Jacob Champion) §

  • 將伺服器變數 ssl_ecdh_curve 重新命名為 ssl_groups,並允許指定多個以冒號分隔的ECDH曲線(Erica Zhang, Daniel Gustafsson) §

    以前的名稱仍然有效。

  • 取消請求鍵 設為 256 位(Heikki Linnakangas, Jelte Fennema-Nio) § §

    這隻有在伺服器和客戶端支援本版本中引入的線協議版本3.2時才可能實現。

  • 新增伺服器變數 autovacuum_worker_slots 以指定後臺工作者的最大數量(Nathan Bossart) §

    設定此變數後,autovacuum_max_workers 可以在執行時調整到此最大值,而無需重新啟動伺服器。

  • 允許指定觸發 自動清理 的死元組的固定數量(Nathan Bossart, Frédéric Yhuel) §

    伺服器變數是 autovacuum_vacuum_max_threshold。百分比仍用於觸發。

  • 更改伺服器變數 max_files_per_process 以僅限制後端開啟的檔案(Andres Freund) §

    以前,postmaster 開啟的檔案也計入此限制。

  • 新增伺服器變數 num_os_semaphores 以報告所需訊號量的數量(Nathan Bossart) §

    這對於作業系統配置很有用。

  • 新增伺服器變數 extension_control_path 以指定擴充套件控制檔案的位置(Peter Eisentraut, Matheus Alcantara) § §

E.1.3.1.7. 流複製和恢復 #
E.1.3.1.8. 邏輯複製 #
  • 允許 生成列 的值進行邏輯複製(Shubham Khanna, Vignesh C, Zhijie Hou, Shlok Kyal, Peter Smith) § § § §

    如果釋出指定了列列表,則釋出所有指定的列(生成的和非生成的)。如果沒有指定的列列表,則釋出選項 publish_generated_columns 控制是否釋出生成的列。以前生成的列不進行復制,訂閱者必須在可能的情況下計算值;這對於缺少此類功能的非 PostgreSQL 訂閱者特別有用。

  • CREATE SUBSCRIPTION 流式選項的預設值從 off 更改為 parallel(Vignesh C) §

  • 允許 ALTER SUBSCRIPTION 更改複製槽的兩階段提交行為(Hayato Kuroda, Ajin Cherian, Amit Kapila, Zhijie Hou) § §

  • 在應用邏輯複製更改時記錄 衝突(Zhijie Hou, Nisha Moond) § § § § §

    同時在 pg_stat_subscription_stats 的新列中報告。

E.1.3.2. 實用命令 #

  • 允許 生成列 是虛擬的,並使它們成為預設值(Peter Eisentraut, Jian He, Richard Guo, Dean Rasheed) § § §

    虛擬生成列在讀取時生成其值,而不是在寫入時生成。寫入行為仍然可以透過 STORED 選項指定。

  • DML查詢中向 RETURNING 新增 OLD/NEW 支援(Dean Rasheed) §

    以前,RETURNING 只返回 INSERTUPDATE 的新值,以及 DELETE 的舊值;MERGE 將返回為執行的內部查詢的適當值。此新語法允許 INSERT/UPDATE/DELETE/MERGERETURNING 列表透過使用特殊別名 oldnew 顯式返回舊值和新值。這些別名可以重新命名以避免識別符號衝突。

  • 允許像現有本地表一樣建立外部表(Zhang Mingli) §

    語法是 CREATE FOREIGN TABLE ... LIKE

  • 允許 LIKE非確定性排序規則一起使用(Peter Eisentraut) §

  • 允許文字位置搜尋函式與非確定性排序規則一起使用(Peter Eisentraut) §

    這些以前會生成錯誤。

  • 新增內建排序規則提供程式 PG_UNICODE_FAST(Jeff Davis) §

    此區域設定支援大小寫對映,但按程式碼點順序排序,而非自然語言順序。

  • 允許 VACUUMANALYZE 處理分割槽表而不處理其子表(Michael Harris) §

    這透過新的 ONLY 選項啟用。這很有用,因為自動清理不處理分割槽表,只處理其子表。

  • 新增函式以修改每關係和每列最佳化器統計資訊(Corey Huinker) § § §

    這些函式是 pg_restore_relation_stats()pg_restore_attribute_stats()pg_clear_relation_stats()pg_clear_attribute_stats()

  • 新增伺服器變數 file_copy_method 以控制檔案複製方法(Nazir Bilal Yavuz) §

    這控制 CREATE DATABASE ... STRATEGY=FILE_COPYALTER DATABASE ... SET TABLESPACE 是使用檔案複製還是克隆。

E.1.3.2.1. 約束 #
  • 允許指定不重疊的 PRIMARY KEYUNIQUE外部索引鍵 約束(Paul A. Jungwirth) § §

    這透過 WITHOUT OVERLAPS 用於 PRIMARY KEYUNIQUE,並透過 PERIOD 用於外部索引鍵,所有這些都應用於最後一個指定的列。

  • 允許將 CHECK外部索引鍵 約束指定為 NOT ENFORCED(Amul Sul) § §

    這還添加了列 pg_constraint.conenforced

  • 要求 主鍵/外部索引鍵 關係使用確定性排序規則或相同的非確定性排序規則(Peter Eisentraut) §

    如果這些要求不滿足,pg_dump 的恢復(pg_upgrade 也使用)將失敗;必須對模式進行更改才能使這些升級方法成功。

  • 將列 NOT NULL 規範儲存在 pg_constraint 中(Álvaro Herrera, Bernd Helmle) § §

    這允許為 NOT NULL 約束指定名稱。這還向外表添加了 NOT NULL 約束,並向本地表添加了 NOT NULL 繼承控制。

  • 允許 ALTER TABLE 設定 NOT NULL 約束的 NOT VALID 屬性(Rushabh Lathia, Jian He) §

  • 允許修改 NOT NULL 約束的可繼承性(Suraj Kharage, Álvaro Herrera) § §

    語法是 ALTER TABLE ... ALTER CONSTRAINT ... [NO] INHERIT

  • 允許分割槽表上的 NOT VALID 外部索引鍵約束(Amul Sul) §

  • 允許在分割槽表上 丟棄約束(Álvaro Herrera) §

    這以前被錯誤地禁止了。

E.1.3.2.2. COPY #
  • 新增 REJECT_LIMIT 以控制 COPY FROM 可以忽略的無效行數(Atsushi Torikoshi) §

    這在 ON_ERROR = 'ignore' 時可用。

  • 允許 COPY TO 從已填充的物化檢視複製行(Jian He) §

  • 新增 COPY LOG_VERBOSITY 級別 silent 以抑制被忽略行的日誌輸出(Atsushi Torikoshi) §

    on_error = 'ignore' 時,此新級別會抑制被丟棄的輸入行的輸出。

  • 禁止在外部表上 COPY FREEZE(Nathan Bossart) §

    以前,COPY 可以工作,但 FREEZE 會被忽略,所以禁止此命令。

E.1.3.2.3. EXPLAIN #
  • 自動將 BUFFERS 輸出包含在 EXPLAIN ANALYZE 中(Guillaume Lelarge, David Rowley) §

  • 新增完整WAL緩衝區計數到 EXPLAIN (WAL) 輸出(Bertrand Drouvot) §

  • EXPLAIN ANALYZE 中,報告每個索引掃描節點使用的索引查詢次數(Peter Geoghegan) §

  • 修改 EXPLAIN 以輸出小數行計數(Ibrar Ahmed, Ilia Evdokimov, Robert Haas) § §

  • 將記憶體和磁碟使用詳細資訊新增到 MaterialWindow Aggregate 和通用表表達式節點到 EXPLAIN 輸出(David Rowley, Tatsuo Ishii) § § § §

  • 將視窗函式引數的詳細資訊新增到 EXPLAIN 輸出(Tom Lane) §

  • Parallel Bitmap Heap Scan 工作者快取統計資訊新增到 EXPLAIN ANALYZE(David Geier, Heikki Linnakangas, Donghang Lin, Alena Rybakina, David Rowley) §

  • EXPLAIN ANALYZE 輸出中指示已停用節點(Robert Haas, David Rowley, Laurenz Albe) § § §

E.1.3.3. 資料型別 #

  • 改進 Unicode 全大小寫對映和轉換(Jeff Davis) § §

    這增加了進行條件和標題大小寫對映的能力,以及將單個字元大小寫對映到多個字元的能力。

  • 允許將 jsonb null 值轉換為標量型別為 NULL(Tom Lane) §

    以前這樣的轉換會產生錯誤。

  • json{b}_strip_nulls 新增可選引數,以允許刪除空陣列元素(Florents Tselai) §

  • 新增函式 array_sort(),它對陣列的第一維進行排序(Junwang Zhao, Jian He) §

  • 新增函式 array_reverse(),它反轉陣列的第一維(Aleksander Alekseev) §

  • 新增函式 reverse() 以反轉 bytea 位元組(Aleksander Alekseev) §

  • 允許在整數型別和 bytea 之間進行轉換(Aleksander Alekseev) §

    整數值儲存為 bytea 二進位制補碼值。

  • 更新 Unicode 資料至 Unicode 16.0.0(Peter Eisentraut) §

  • 新增愛沙尼亞語的全文搜尋 詞幹提取(Tom Lane) §

  • 改進 XML 錯誤程式碼以更接近SQL標準(Tom Lane) §

    這些錯誤透過 SQLSTATE 報告。

E.1.3.4. 函式 #

E.1.3.5. libpq #

  • 新增函式 PQfullProtocolVersion() 以報告完整的(包括次要版本)協議版本號(Jacob Champion, Jelte Fennema-Nio) §

  • 新增 libpq 連線 引數環境變數 以指定連線的最小和最大可接受協議版本(Jelte Fennema-Nio) § §

  • 向客戶端報告 search_path 更改(Alexander Kukushkin, Jelte Fennema-Nio, Tomas Vondra) § §

  • 新增 PQtrace() 輸出,用於所有訊息型別,包括認證(Jelte Fennema-Nio) § § § § §

  • 新增 libpq 連線引數 sslkeylogfile,該引數會轉儲SSL關鍵材料(Abhishek Chanda, Daniel Gustafsson) §

    這對於除錯很有用。

  • 修改一些 libpq 函式簽名以使用 int64_t(Thomas Munro) §

    這些以前使用 pg_int64,現已棄用。

E.1.3.6. psql #

  • 允許 psql 解析、繫結和關閉命名預處理語句(Anthonin Bonnefoy, Michael Paquier) § §

    這透過新命令 \parse\bind_named\close_prepared 完成。

  • 新增 psql 反斜槓命令以允許發出管道查詢(Anthonin Bonnefoy) § § §

    新命令是 \startpipeline\syncpipeline\sendpipeline\endpipeline\flushrequest\flush\getresults

  • 允許將管道狀態新增到 psql 提示符並新增相關狀態變數(Anthonin Bonnefoy) §

    新的提示符字元是 %P,新的 psql 變數是 PIPELINE_SYNC_COUNTPIPELINE_COMMAND_COUNTPIPELINE_RESULT_COUNT

  • 允許將連線服務名稱新增到 psql 提示符或透過 psql 變數訪問它(Michael Banck) §

  • 新增 psql 選項,在所有列表命令上使用擴充套件模式(Dean Rasheed) §

    新增反斜槓字尾 x 啟用此功能。

  • 更改 psql\conninfo 以使用表格格式幷包含更多資訊(Álvaro Herrera, Maiquel Grassi, Hunaid Sohail) §

  • 將函式的防洩漏指示器新增到 psql\df+\do+\dAo+\dC+ 輸出(Yugo Nagata) §

  • \dP+ 中為分割槽關係新增訪問方法詳細資訊(Justin Pryzby) §

  • default_version 新增到 psql \dx 擴充套件輸出(Magnus Hagander) §

  • 新增 psql 變數 WATCH_INTERVAL 以設定預設的 \watch 等待時間(Daniel Gustafsson) §

E.1.3.7. 伺服器應用程式 #

  • 更改 initdb 預設啟用校驗和(Greg Sabino Mullane) § §

    新的 initdb 選項 --no-data-checksums 停用校驗和。

  • 新增 initdb 選項 --no-sync-data-files 以避免同步堆/索引檔案(Nathan Bossart) §

    initdb 選項 --no-sync 仍然可用,以避免同步任何檔案。

  • 新增 vacuumdb 選項 --missing-stats-only 以僅計算缺失的最佳化器統計資訊(Corey Huinker, Nathan Bossart) § §

    此選項只能由超級使用者執行,並且只能與選項 --analyze-only--analyze-in-stages 一起使用。

  • 新增 pg_combinebackup 選項 -k/--link 以啟用硬連結(Israel Barth Rubio, Robert Haas) §

    只有某些檔案可以硬連結。如果備份將獨立使用,則不應使用此功能。

  • 允許 pg_verifybackup 驗證 tar 格式備份(Amul Sul) §

  • 如果 pg_rewind--source-server 指定了資料庫名稱,則在 --write-recovery-conf 輸出中使用它(Masahiko Sawada) §

  • 新增 pg_resetwal 選項 --char-signedness 以更改預設的 char 有符號性(Masahiko Sawada) §

  • 新增 pg_dump 選項 --statistics(Jeff Davis) § §

  • 新增 pg_dumppg_dumpall 選項 --sequence-data 以轉儲通常會被排除的序列資料(Nathan Bossart) § §

  • 新增 pg_dumppg_dumpallpg_restore 選項 --statistics-only--no-statistics--no-data--no-schema(Corey Huinker, Jeff Davis) §

  • 新增選項 --no-policies 以停用 pg_dumppg_dumpallpg_restore 中的行級安全策略處理(Nikolay Samokhvalov) §

    這對於遷移到具有不同策略的系統很有用。

E.1.3.7.2. pg_upgrade #
  • 允許 pg_upgrade 保留最佳化器統計資訊(Corey Huinker, Jeff Davis, Nathan Bossart) § § § §

    不保留擴充套件統計資訊。同時新增 pg_upgrade 選項 --no-statistics 以停用統計資訊保留。

  • 允許 pg_upgrade 並行處理資料庫檢查(Nathan Bossart) § § § § § § § § § §

    這由現有 --jobs 選項控制。

  • 新增 pg_upgrade 選項 --swap 以交換目錄而不是複製、克隆或連結檔案(Nathan Bossart) §

    此模式可能是最快的。

  • 新增 pg_upgrade 選項 --set-char-signedness 以設定新叢集的預設 char 符號性(Masahiko Sawada) § §

    這是為了處理 PostgreSQL 18 之前叢集的預設CPU符號性與新叢集不匹配的情況。

E.1.3.7.3. 邏輯複製應用程式 #
  • 新增 pg_createsubscriber 選項 --all 以建立所有資料庫的邏輯副本(Shubham Khanna) §

  • 新增 pg_createsubscriber 選項 --clean 以刪除釋出(Shubham Khanna) § §

  • 新增 pg_createsubscriber 選項 --enable-two-phase 以啟用預備事務(Shubham Khanna) §

  • 新增 pg_recvlogical 選項 --enable-failover 以指定故障轉移槽(Hayato Kuroda) §

    還新增選項 --enable-two-phase 作為 --two-phase 的同義詞,並棄用後者。

  • 允許 pg_recvlogical --drop-slot 在沒有 --dbname 的情況下工作(Hayato Kuroda) §

E.1.3.8. 原始碼 #

  • 分離 注入點 的載入和執行(Michael Paquier, Heikki Linnakangas) § §

    現在可以透過 INJECTION_POINT_LOAD() 建立注入點但不執行,並且可以透過 INJECTION_POINT_CACHED() 執行這些注入點。

  • 支援注入點中的執行時引數(Michael Paquier) §

  • 允許使用 IS_INJECTION_POINT_ATTACHED() 的內聯注入點測試程式碼(Heikki Linnakangas) §

  • 使用SIMD(單指令多資料)改進處理長 JSON 字串的效能(David Rowley) §

  • 使用 x86AVX-512 指令加速 CRC32C 計算(Raghuveer Devulapalli, Paul Amonson) §

  • 新增ARMNeon 和SVE CPU用於 popcount(整數位計數)的內在函式(Chiranmoy Bhattacharya, Devanga Susmitha, Rama Malladi) § §

  • 提高數值乘法和除法的速度(Joel Jacobson, Dean Rasheed) § § § §

  • 新增配置選項--with-libnuma以啟用NUMA(Jakub Wartak, Bertrand Drouvot) § § §

    函式pg_numa_available()報告NUMA,以及報告共享記憶體跨節點分佈的系統檢視pg_shmem_allocations_numapg_buffercache_numaNUMA節點。

  • TOAST表新增到pg_index,以允許建立超大型表示式索引(Nathan Bossart) §

  • 移除列pg_attribute.attcacheoff(David Rowley) §

  • 新增列pg_class.relallfrozen(Melanie Plageman) §

  • amgettreeheightamconsistentequalityamconsistentordering新增到索引訪問方法API(Mark Dilger) § §

  • 新增GiST支援函式stratnum()(Paul A. Jungwirth) §

  • 記錄charpg_controldata中的預設有符號性(Masahiko Sawada) §CPU的預設有符號性。

  • PL/Python中新增對Python“Limited”的支援(Peter Eisentraut) § §API“的支援。

    這有助於防止由於Python 3.x 版本不匹配引起的問題。

  • 將最低支援的Python版本更改為3.6.8(Jacob Champion) §

  • 移除對早於1.1.1版本的OpenSSL的支援(Daniel Gustafsson) § §

  • 如果啟用LLVM,則要求版本14或更高(Thomas Munro) §

  • 新增宏PG_MODULE_MAGIC_EXT以允許擴充套件報告其名稱和版本(Andrei Lepikhov) §

    此資訊可以透過新函式pg_get_loaded_modules()訪問。

  • 文件指出SPI_connect()/SPI_connect_ext()總是返回成功(SPI_OK_CONNECT)(Stepan Neretin) §

    錯誤總是透過ereport()報告。

  • 新增關於APIABI相容性的文件部分(David Wheeler, Peter Eisentraut) §

  • 移除WindowsMeson構建的實驗性標記(Aleksander Alekseev) §

  • 移除配置選項--disable-spinlocks--disable-atomics(Thomas Munro) § §

    現在需要32位原子操作。

  • 移除對HPPA/PA-RISC架構的支援(Tom Lane) §

E.1.3.9. 附加模組 #

  • 新增擴充套件pg_logicalinspect以檢查邏輯快照(Bertrand Drouvot) §

  • 新增擴充套件pg_overexplain,它向EXPLAIN輸出新增除錯細節(Robert Haas) §

  • postgres_fdw_get_connections()新增輸出列(Hayato Kuroda, Sagar Dilip Shedge) § § § §

    新的輸出列used_in_xact指示外部資料包裝器是否正在被當前事務使用,closed指示它是否已關閉,user_name指示使用者名稱,remote_backend_pid指示遠端後端程序識別符號。

  • 允許將客戶端的SCRAM認證傳遞給postgres_fdw伺服器(Matheus Alcantara, Peter Eisentraut) §

    這避免了在資料庫中儲存postgres_fdw認證資訊,並透過postgres_fdw use_scram_passthrough連線選項啟用。libpq使用新的連線引數scram_client_keyscram_server_key

  • 允許SCRAM將客戶端的認證傳遞給dblink伺服器(Matheus Alcantara) §

  • file_fdw新增on_errorlog_verbosity選項(Atsushi Torikoshi) §

    這些控制file_fdw如何處理和報告無效檔案行。

  • 新增reject_limit以控制file_fdw可以忽略的無效行數(Atsushi Torikoshi) §

    這在ON_ERROR = 'ignore'時啟用。

  • passwordcheck新增可配置變數min_password_length(Emanuele Musella, Maurizio Boriani) §

    這控制最小密碼長度。

  • pgbench在每指令碼報告中報告失敗、重試或跳過的事務數(Yugo Nagata) §

  • 新增isn伺服器變數weak以控制無效校驗位接受(Viktor Holmberg) §

    這以前僅由函式isn_weak()控制。

  • 允許對值進行排序以加快btree_gist索引的構建(Bernd Helmle, Andrey Borodin) §

  • 新增amcheck檢查函式gin_index_check()以驗證GIN索引(Grigory Kryachko, Heikki Linnakangas, Andrey Borodin) §

  • 新增函式pg_buffercache_evict_relation()pg_buffercache_evict_all()以逐出未固定的共享緩衝區(Nazir Bilal Yavuz) §

    現有函式pg_buffercache_evict()現在返回緩衝區重新整理狀態。

  • 允許擴充套件安裝自定義的EXPLAIN選項(Robert Haas, Sami Imseih) § § §

  • 允許擴充套件使用伺服器的累計統計資訊API(Michael Paquier) § §

E.1.3.9.1. pg_stat_statements #
  • 允許CREATE TABLE ASDECLARE的查詢被pg_stat_statements跟蹤(Anthonin Bonnefoy) §

    它們現在也被分配了查詢ID。

  • 允許pg_stat_statementsSET值的引數化(Greg Sabino Mullane, Michael Paquier) §

    這減少了由於具有不同常量的SET語句引起的資料膨脹。

  • 新增pg_stat_statements列以報告並行活動(Guillaume Lelarge) §

    新列是 parallel_workers_to_launchparallel_workers_launched

  • 新增pg_stat_statements.wal_buffers_full以報告滿WAL緩衝區(Bertrand Drouvot) §

E.1.3.9.2. pgcrypto #
  • 新增pgcrypto演算法sha256cryptsha512crypt(Bernd Helmle) §

  • pgcrypto加密和解密新增CFB模式(Umar Hayat) §

  • 新增函式fips_mode()以報告伺服器的FIPS模式(Daniel Gustafsson) §

  • 新增pgcrypto伺服器變數builtin_crypto_enabled以允許停用內建非FIPS模式加密函式(Daniel Gustafsson, Joe Conway) §

    這對於保證FIPS模式行為很有用。

E.1.4. 致謝 #

以下個人(按字母順序)作為補丁作者、提交者、審閱者、測試人員或問題報告者為本版本做出了貢獻。

Abhishek Chanda
Adam Guo
Adam Rauch
Aidar Imamov
Ajin Cherian
Alastair Turner
Alec Cozens
Aleksander Alekseev
Alena Rybakina
Alex Friedman
Alex Richman
Alexander Alehin
Alexander Borisov
Alexander Korotkov
Alexander Kozhemyakin
Alexander Kukushkin
Alexander Kuzmenkov
Alexander Kuznetsov
Alexander Lakhin
Alexander Pyhalov
Alexandra Wang
Alexey Dvoichenkov
Alexey Makhmutov
Alexey Shishkin
Ali Akbar
Álvaro Herrera
Álvaro Mongil
Amit Kapila
Amit Langote
Amul Sul
Andreas Karlsson
Andreas Scherbaum
Andreas Ulbrich
Andrei Lepikhov
Andres Freund
Andrew
Andrew Bille
Andrew Dunstan
Andrew Jackson
Andrew Kane
Andrew Watkins
Andrey Borodin
Andrey Chudnovsky
Andrey Rachitskiy
Andrey Rudometov
Andy Alsup
Andy Fan
Anthonin Bonnefoy
Anthony Hsu
Anthony Leung
Anton Melnikov
Anton Voloshin
Antonin Houska
Antti Lampinen
Arseniy Mukhin
Artur Zakirov
Arun Thirupathi
Ashutosh Bapat
Asphator
Atsushi Torikoshi
Avi Weinberg
Aya Iwata
Ayush Tiwari
Ayush Vatsa
Bastien Roucariès
Ben Peachey Higdon
Benoit Lobréau
Bernd Helmle
Bernd Reiß
Bernhard Wiedemann
Bertrand Drouvot
Bertrand Mamasam
Bharath Rupireddy
Bogdan Grigorenko
Boyu Yang
Braulio Fdo Gonzalez
Bruce Momjian
Bykov Ivan
Cameron Vogt
Cary Huang
Cédric Villemain
Cees van Zeeland
ChangAo Chen
Chao Li
Chapman Flack
Charles Samborski
Chengwen Wu
Chengxi Sun
Chiranmoy Bhattacharya
Chris Gooch
Christian Charukiewicz
Christoph Berg
Christophe Courtois
Christopher Inokuchi
Clemens Ruck
Corey Huinker
Craig Milhiser
Crisp Lee
Dagfinn Ilmari Mannsåker
Daniel Elishakov
Daniel Gustafsson
Daniel Vérité
Daniel Westermann
Daniele Varrazzo
Daniil Davydov
Daria Shanina
Dave Cramer
Dave Page
David Benjamin
David Christensen
David Fiedler
David G. Johnston
David Geier
David Rowley
David Steele
David Wheeler
David Zhang
Davinder Singh
Dean Rasheed
Devanga Susmitha
Devrim Gündüz
Dian Fay
Dilip Kumar
Dimitrios Apostolou
Dipesh Dhameliya
Dmitrii Bondar
Dmitry Dolgov
Dmitry Koval
Dmitry Kovalenko
Dmitry Yurichev
Dominique Devienne
Donghang Lin
Dorjpalam Batbaatar
Drew Callahan
Duncan Sands
Dwayne Towell
Dzmitry Jachnik
Egor Chindyaskin
Egor Rogov
Emanuel Ionescu
Emanuele Musella
Emre Hasegeli
Eric Cyr
Erica Zhang
Erik Nordström
Erik Rijkers
Erik Wienhold
Erki Eessaar
Ethan Mertz
Etienne LAFARGE
Etsuro Fujita
Euler Taveira
Evan Si
Evgeniy Gorbanev
Fabio R. Sluzala
Fabrízio de Royes Mello
Feike Steenbergen
Feliphe Pozzer
Felix
Fire Emerald
Florents Tselai
Francesco Degrassi
Frank Streitzig
Frédéric Yhuel
Fredrik Widlert
Gabriele Bartolini
Gavin Panella
Geoff Winkless
George MacKerron
Gilles Darold
Grant Gryczan
Greg Burd
Greg Sabino Mullane
Greg Stark
Grigory Kryachko
Guillaume Lelarge
Gunnar Morling
Gunnar Wagner
Gurjeet Singh
Haifang Wang
Hajime Matsunaga
Hamid Akhtar
Hannu Krosing
Hari Krishna Sunder
Haruka Takatsuka
Hayato Kuroda
Heikki Linnakangas
Hironobu Suzuki
Holger Jakobs
Hubert Lubaczewski
Hugo Dubois
Hugo Zhang
Hunaid Sohail
Hywel Carver
Ian Barwick
Ibrar Ahmed
Igor Gnatyuk
Igor Korot
Ilia Evdokimov
Ilya Gladyshev
Ilyasov Ian
Imran Zaheer
Isaac Morland
Israel Barth Rubio
Ivan Kush
Jacob Brazeal
Jacob Champion
Jaime Casanova
Jakob Egger
Jakub Wartak
James Coleman
James Hunter
Jan Behrens
Japin Li
Jason Smith
Jayesh Dehankar
Jeevan Chalke
Jeff Davis
Jehan-Guillaume de Rorthais
Jelte Fennema-Nio
Jian He
Jianghua Yang
Jiao Shuntian
Jim Jones
Jim Nasby
Jingtang Zhang
Jingzhou Fu
Joe Conway
Joel Jacobson
John Hutchins
John Naylor
Jonathan Katz
Jorge Solórzano
José Villanova
Josef Šimánek
Joseph Koshakow
Julien Rouhaud
Junwang Zhao
Justin Pryzby
Kaido Vaikla
Kaimeh
Karina Litskevich
Karthik S
Kartyshov Ivan
Kashif Zeeshan
Keisuke Kuroda
Kevin Hale Boyes
Kevin K Biju
Kirill Reshke
Kirill Zdornyy
Koen De Groote
Koichi Suzuki
Koki Nakamura
Konstantin Knizhnik
Kouhei Sutou
Kuntal Ghosh
Kyotaro Horiguchi
Lakshmi Narayana Velayudam
Lars Kanis
Laurence Parry
Laurenz Albe
Lele Gaifax
Li Yong
Lilian Ontowhee
Lingbin Meng
Luboslav Špilák
Luca Vallisa
Lukas Fittl
Maciek Sakrejda
Magnus Hagander
Mahendra Singh Thalor
Mahendrakar Srinivasarao
Maiquel Grassi
Maksim Korotkov
Maksim Melnikov
Man Zeng
Marat Buharov
Marc Balmer
Marco Nenciarini
Marcos Pegoraro
Marina Polyakova
Mark Callaghan
Mark Dilger
Marlene Brandstaetter
Marlene Reiterer
Martin Rakhmanov
Masahiko Sawada
Masahiro Ikeda
Masao Fujii
Mason Mackaman
Mat Arye
Matheus Alcantara
Mats Kindahl
Matthew Gabeler-Lee
Matthew Kim
Matthew Sterrett
Matthew Woodcraft
Matthias van de Meent
Matthieu Denais
Maurizio Boriani
Max Johnson
Max Madden
Maxim Boguk
Maxim Orlov
Maximilian Chrzan
Melanie Plageman
Melih Mutlu
Mert Alev
Michael Banck
Michael Bondarenko
Michael Christofides
Michael Guissine
Michael Harris
Michaël Paquier
Michail Nikolaev
Michal Kleczek
Michel Pelletier
Mikaël Gourlaouen
Mikhail Gribkov
Mikhail Kot
Milosz Chmura
Muralikrishna Bandaru
Murat Efendioglu
Mutaamba Maasha
Naeem Akhter
Nat Makarevitch
Nathan Bossart
Navneet Kumar
Nazir Bilal Yavuz
Neil Conway
Niccolò Fei
Nick Davies
Nicolas Maus
Niek Brasa
Nikhil Raj
Nikita
Nikita Kalinin
Nikita Malakhov
Nikolay Samokhvalov
Nikolay Shaplov
Nisha Moond
Nitin Jadhav
Nitin Motiani
Noah Misch
Noboru Saito
Noriyoshi Shinoda
Ole Peder Brandtzæg
Oleg Sibiryakov
Oleg Tselebrovskiy
Olleg Samoylov
Onder Kalaci
Ondrej Navratil
Patrick Stählin
Paul Amonson
Paul Jungwirth
Paul Ramsey
Pavel Borisov
Pavel Luzanov
Pavel Nekrasov
Pavel Stehule
Peter Eisentraut
Peter Geoghegan
Peter Mittere
Peter Smith
Phil Eaton
Philipp Salvisberg
Philippe Beaudoin
Pierre Giraud
Pixian Shi
Polina Bungina
Przemyslaw Sztoch
Quynh Tran
Rafia Sabih
Raghuveer Devulapalli
Rahila Syed
Rama Malladi
Ran Benita
Ranier Vilela
Renan Alves Fonseca
Richard Guo
Richard Neill
Rintaro Ikeda
Robert Haas
Robert Treat
Robins Tharakan
Roman Zharkov
Ronald Cruz
Ronan Dunklau
Rui Zhao
Rushabh Lathia
Rustam Allakov
Ryo Kanbayashi
Ryohei Takahashi
RyotaK
Sagar Dilip Shedge
Salvatore Dipietro
Sam Gabrielsson
Sam James
Sameer Kumar
Sami Imseih
Samuel Thibault
Satyanarayana Narlapuram
Sebastian Skalacki
Senglee Choi
Sergei Kornilov
Sergey Belyashov
Sergey Dudoladov
Sergey Prokhorenko
Sergey Sargsyan
Sergey Soloviev
Sergey Tatarintsev
Shaik Mohammad Mujeeb
Shawn McCoy
Shenhao Wang
Shihao Zhong
Shinya Kato
Shlok Kyal
Shubham Khanna
Shveta Malik
Simon Riggs
Smolkin Grigory
Sofia Kopikova
Song Hongyu
Song Jinzhou
Soumyadeep Chakraborty
Sravan Kumar
Srinath Reddy
Stan Hu
Stepan Neretin
Stephen Fewer
Stephen Frost
Steve Chavez
Steven Niu
Suraj Kharage
Sven Klemm
Takamichi Osumi
Takeshi Ideriha
Tatsuo Ishii
Ted Yu
Tels
Tender Wang
Teodor Sigaev
Thom Brown
Thomas Baehler
Thomas Krennwallner
Thomas Munro
Tim Wood
Timur Magomedov
Tobias Wendorff
Todd Cook
Tofig Aliev
Tom Lane
Tomas Vondra
Tomasz Rybak
Tomasz Szypowski
Torsten Foertsch
Toshi Harada
Tristan Partin
Triveni N
Umar Hayat
Vallimaharajan G
Vasya Boytsov
Victor Yegorov
Vignesh C
Viktor Holmberg
Vinícius Abrahão
Vinod Sridharan
Virender Singla
Vitaly Davydov
Vladlen Popolitov
Vladyslav Nebozhyn
Walid Ibrahim
Webbo Han
Wenhui Qiu
Will Mortensen
Will Storey
Wolfgang Walther
Xin Zhang
Xing Guo
Xuneng Zhou
Yan Chengpen
Yang Lei
Yaroslav Saburov
Yaroslav Syrytsia
Yasir Hussain
Yasuo Honda
Yogesh Sharma
Yonghao Lee
Yoran Heling
Yu Liang
Yugo Nagata
Yuhang Qiu
Yuki Seino
Yura Sokolov
Yurii Rashkovskii
Yushi Ogiwara
Yusuke Sugie
Yuta Katsuragi
Yuto Sasaki
Yuuki Fujii
Yuya Watari
Zane Duffield
Zeyuan Hu
Zhang Mingli
Zhihong Yu
Zhijie Hou
Zsolt Parragi

提交更正

如果您發現文件中有任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表單報告文件問題。