2025年9月25日: PostgreSQL 18 釋出!

PostgreSQL 16.4、15.8、14.13、13.16、12.20 和 17 Beta 3 已釋出!

釋出於 2024-08-08,作者:PostgreSQL 全球開發組
PostgreSQL 專案 安全

PostgreSQL 全球開發組已釋出所有受支援版本的 PostgreSQL 更新,包括 16.4、15.8、14.13、13.16 和 12.20,以及 PostgreSQL 17 的第三個 Beta 版本。本次釋出修復了 1 個安全漏洞和過去幾個月報告的 55 個以上的錯誤。

有關更改的完整列表,請參閱 發行說明

PostgreSQL 12 EOL 通知

PostgreSQL 12 將於 2024 年 11 月 14 日停止接收修復。如果您在生產環境中使用 PostgreSQL 12,我們建議您計劃升級到更新的、受支援的 PostgreSQL 版本。請參閱我們的 版本策略 以獲取更多資訊。

安全問題

CVE-2024-7348:pg_dump 期間 PostgreSQL 關係替換執行任意 SQL

CVSS v3.1 基本得分:8.8

受支援的、易受攻擊的版本:12 - 16。

能夠建立和刪除非臨時物件的攻擊者可以注入 SQL 程式碼,這些程式碼將被併發的 pg_dump 會話執行,其許可權與執行 pg_dump 的角色相同(通常是超級使用者)。攻擊涉及用檢視或外表替換序列或類似物件,這些檢視或外表將執行惡意程式碼。為防止此問題,引入了一個新的伺服器引數 restrict_nonsystem_relation_kind,它可以停用非內建檢視的擴充套件以及對外部表的訪問,並讓 pg_dump 在可用時設定該引數。請注意,只有當 pg_dump 和它正在備份的伺服器都足夠新以包含此修復時,攻擊才會被阻止。

PostgreSQL 專案感謝 Noah Misch 報告此問題。

錯誤修復和改進

本次更新修復了過去幾個月報告的 55 個以上錯誤。以下列出的問題會影響 PostgreSQL 16。其中一些問題也可能影響 PostgreSQL 的其他受支援版本。

  • 避免“Merge Right Anti Join”計劃產生不正確的結果,在這種情況下,如果內部關係已知具有唯一的連線鍵,當外部關係中有重複的連線鍵時,合併可能會出現問題。
  • 防止 VACUUM 中的無限迴圈。
  • 修復 ALTER TABLE DETACH ... PARTITION CONCURRENTLY 期間的分割槽剪枝設定。
  • 修復作為 CALL 語句引數使用的穩定函式行為。
  • pg_sequence_last_value() 現在在應用於備用伺服器上的未記錄序列和來自其他會話的臨時序列時返回 NULL,而不是丟擲錯誤。
  • 修復 websearch_to_tsquery() 中被忽略的運算子的解析。
  • 正確檢查由 INSERT ... DEFAULT 目標列的檢視的可更新性。
  • ALTER TABLE ... SET LOGGED|UNLOGGED 期間鎖定已擁有的序列。
  • 如果排隊的 AFTER 觸發器不再存在,則不丟擲錯誤。
  • 修復在所需的索引包含表示式或謂詞時(例如,透過可更新檢視)選擇 INSERT ... ON CONFLICT 的仲裁索引。
  • 拒絕使用 ALTER TABLE 修改其他會話的臨時表。
  • 修復 CREATE TABLE ... LIKE STATISTICS 中表達式的擴充套件統計資訊的處理。
  • 修復由 MIN()MAX() 聚合生成的子查詢失敗。
  • 不允許在位置引數中使用下劃線。
  • 當 JIT 內聯的後端函式丟擲錯誤時,避免崩潰。
  • 修復在啟動熱備伺服器時,已準備事務的子事務的處理。
  • 防止邏輯複製槽初始化不正確。
  • 修復邏輯複製 WAL 傳送器在將更改釋出到分割槽表(其分割槽行型別與表物理不同)時的記憶體洩漏。
  • 停用 OpenSSL 建立有狀態 TLS 會話票證。
  • 修復 PL/pgSQL 處理包含下劃線的整數範圍(例如,FOR i IN 1_001..1_002)的方式。
  • 修復 PL/Perl 與 Perl 5.40 之間的不相容性。
  • 與遞迴 PL/Python 函式和觸發器相關的多項修復。
  • 確保 pg_restore -l 正確報告依賴表的內容條目。
  • pg_stat_statements 現在為 SQL 語言函式中出現的實用程式(非 SELECT/INSERT/UPDATE)語句提供查詢 ID。
  • 修復 postgres_fdw 在將外部表對映到非平凡的遠端檢視時的問題。
  • postgres_fdw 不再將 FETCH FIRST WITH TIES 子句傳送到遠端伺服器。

更新

所有 PostgreSQL 更新版本都是累積的。與其他次要版本一樣,使用者不需要轉儲和重新載入資料庫或使用 pg_upgrade 來應用此更新版本;您可以直接關閉 PostgreSQL 並更新其二進位制檔案。

跳過一個或多個更新版本的使用者可能需要執行額外的更新後步驟;請參閱早期版本的發行說明以獲取詳細資訊。

有關更多詳細資訊,請參閱 發行說明

關於 PostgreSQL 17 Beta 的說明

此版本標誌著 PostgreSQL 17 的第三個 Beta 版本,使社群更接近通用可用性,初步定於第三季度末。

本著開源 PostgreSQL 社群的精神,我們強烈建議您在系統上測試 PostgreSQL 17 的新功能,以幫助我們消除可能存在的錯誤或其他問題。雖然我們不建議在生產環境中使用 PostgreSQL 17 Beta 3,但我們鼓勵您嘗試在您的典型應用程式工作負載中使用此 Beta 版本。

您的測試和反饋將幫助社群確保 PostgreSQL 17 版本能夠保持我們提供世界上最先進的開源關係資料庫的穩定、可靠版本的標準。請閱讀更多關於我們的 Beta 測試流程 以及您如何貢獻。

https://postgres.tw/developer/beta/

升級到 PostgreSQL 17 Beta 3

要從早期版本的 PostgreSQL 升級到 PostgreSQL 17 Beta 3,您將需要使用與升級 PostgreSQL 主版本相似的策略(例如,pg_upgradepg_dump / pg_restore)。有關更多資訊,請訪問有關 升級 的文件部分。

Beta 2 以來的更改

PostgreSQL 17 Beta 3 中的修復和更改包括:

  • standby_slot_names 引數重新命名為 synchronized_standby_slots
  • 多項 SQL/JSON 修復。
  • 修復 pg_combinebackup --clone
  • 修復 pg_createsubscriber 以支援包含空格的資料庫名稱。
  • pg_createsubscriber 現在會在目標資料庫上執行時刪除預先存在的訂閱。
  • pg_upgrade 期間提高檢索訂閱資訊的效率。
  • 修復 sslmode=prefer 期間的 TLS 回退行為,在伺服器在啟動過程中傳送錯誤時會報錯。
  • 記錄 pg_basebackup 在備用伺服器上執行增量備份時,在上次備份後立即執行的錯誤情況。
  • 修復 pg_upgrade --transaction-size 可能導致後端使用比平時多一個數量級的 RAM 的問題。

請參閱 釋出說明 以獲取新功能和更改功能的完整列表,以及 PostgreSQL 17 未解決問題 以獲取有關修復和更改的更多詳細資訊。

測試 Bug 和相容性

每個 PostgreSQL 版本的穩定性在很大程度上取決於您——社群——在 PostgreSQL 17 通用可用性之前,使用您的工作負載和測試工具測試即將釋出版本,以發現 Bug 和迴歸。由於這是 Beta 版,資料庫行為、功能細節和 API 仍有可能進行少量更改。您的反饋和測試將有助於確定新功能的最終調整,因此請在不久的將來進行測試。使用者測試的質量將決定我們何時可以釋出最終版本。

PostgreSQL Wiki 上公開提供了一個 未解決問題 列表。您可以使用 PostgreSQL 網站上的此表單 報告 Bug

https://postgres.tw/account/submitbug/

連結

如果您對此版本公告有任何更正或建議,請將其傳送至 pgsql-www@lists.postgresql.org 公共 郵件列表