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 終止支援通知

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 開放項目以獲取有關修復和變更的更多詳細資訊。

錯誤與相容性測試

每個 PostgreSQL 版本的穩定性極大地取決於您(社群),在 PostgreSQL 17 正式發布之前,使用您的工作負載和測試工具測試即將推出的版本,以找出錯誤和回歸。 由於這是 Beta 版本,因此資料庫行為、功能細節和 API 仍有可能進行細微變更。 您的回饋和測試將有助於確定新功能的最終調整,因此請在近期進行測試。 使用者測試的品質有助於確定我們何時可以發布最終版本。

開放問題的列表已在 PostgreSQL Wiki 上公開提供。您可以使用 PostgreSQL 網站上的此表格回報錯誤

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

連結

如果您對此發布公告有更正或建議,請將它們發送到 pgsql-www@lists.postgresql.org 公共郵件列表