PostgreSQL 12.2、11.7、10.12、9.6.17、9.5.21 和 9.4.26 已發布!

發布於 2020-02-13,作者:PostgreSQL Global Development Group
PostgreSQL 專案 安全性

PostgreSQL Global Development Group 已發布我們資料庫系統所有支援版本的更新,包括 12.2、11.7、10.12、9.6.17、9.5.21 和 9.4.26。 此版本修復了 PostgreSQL 伺服器中發現的一個安全性問題,以及過去三個月報告的 75 多個錯誤。

使用者應盡快計畫更新。

PostgreSQL 9.4 現已終止支援 (EOL)

這是 PostgreSQL 9.4 的最後一個版本,它將不再收到安全性更新和錯誤修復。PostgreSQL 9.4 引入了新功能,例如 JSONB 支援、ALTER SYSTEM 命令、將邏輯變更串流到輸出外掛程式的能力,以及更多

雖然我們對這個版本感到非常自豪,但這些功能也可以在較新版本的 PostgreSQL 中找到。 其中許多功能也得到了改進,並且根據我們的版本政策,現在是淘汰 PostgreSQL 9.4 的時候了。

為了獲得持續支援,我們建議您計畫升級到更新、受支援的 PostgreSQL 版本。 請參閱 PostgreSQL 版本政策以獲取更多資訊。

安全性問題

  • CVE-2020-1720:ALTER ... DEPENDS ON EXTENSION 缺少授權檢查。

受影響版本:9.6 - 12

ALTER ... DEPENDS ON EXTENSION 子命令不執行授權檢查,這可能允許未授權的使用者在特定條件下刪除任何函數、程序、實體化檢視、索引或觸發器。 如果管理員已安裝擴充功能,且未授權的使用者可以 CREATE,或者擴充功能擁有者可預測地執行 DROP EXTENSION 或被說服執行 DROP EXTENSION,則可能會發生此攻擊。

PostgreSQL 專案感謝 Tom Lane 報告此問題。

錯誤修復和改進

此更新還修復了過去幾個月報告的 75 多個錯誤。 其中一些問題僅影響版本 12,但也可能影響所有支援的版本。

其中一些修復包括:

  • 修復了具有外部鍵參考的分區表,其中 TRUNCATE ... CASCADE 不會刪除所有資料的問題。 如果您之前在具有外部鍵參考的分區表上使用過 TRUNCATE ... CASCADE,請參閱「更新」部分以獲取驗證和清理步驟。
  • 修復了無法將外部鍵約束新增到具有子分區(也稱為多層分區表)的表的問題。 如果您之前使用過此功能,您可以通過分離並重新附加受影響的分區,或者通過刪除並重新將外部鍵約束新增到父表來修復它。 您可以在ALTER TABLE 文件中找到有關如何執行這些步驟的更多資訊。
  • 修復了 CVE-2017-7484 的修復程式引入的分區表效能問題,該修復程式現在允許規劃器使用子表上的統計資訊,以用於使用者在父表上被授予訪問權限的欄位,當查詢包含洩漏運算子時。
  • 分區表的其他一些修復和更改,包括不允許返回偽類型(例如 RECORD)的分區鍵表達式。
  • 修復了邏輯複寫訂閱者執行每個欄位的 UPDATE 觸發器。
  • 修復了邏輯複寫訂閱者和發佈者的幾個崩潰和失敗。
  • 提高了使用 REPLICA IDENTITY FULL 的邏輯複寫效率。
  • 確保在物理複寫槽上呼叫 pg_replication_slot_advance() 會在重新啟動後保留變更。
  • 對 walsender 程序的幾個修復。
  • 提高了具有非常大的內部關係的雜湊聯結效能。
  • 通過將 "Subplans Removed" 欄位與其父 Append 或 MergeAppend 計畫一起放置,來修復 EXPLAIN 輸出中 "Subplans Removed" 欄位的放置。
  • 對並行查詢計畫的幾個修復。
  • 對查詢規劃器錯誤的幾個修復,包括影響與單列子查詢聯結的錯誤。
  • 對 MCV 擴充統計資訊的幾個修復,包括一個針對 OR 子句的錯誤估算。
  • 提高具有許多核心的 CPU 上的並行雜湊聯結效率。
  • 在臨時表上執行索引建立、刪除或重新索引時,忽略 CONCURRENTLY 選項。
  • 當並行 CREATE INDEX 沒有空閒的動態共享記憶體槽時,回退到非並行索引建立。
  • 對 GiST 和 GIN 索引的幾個修復。
  • 修復了 boxrangeinet 資料類型的 BRIN 索引操作中可能發生的崩潰。
  • 修復了對 BRIN 假設索引的支援。
  • 修復了在同一個 ALTER TABLE 語句中,在類型新增或變更較早的情況下,ALTER TABLE 中引用的 GENERATED 表達式中的欄位失敗的問題。
  • 修復了外表上多個 AFTER ROW 觸發程序的處理。
  • 修復了 BC 日期 EXTRACT(ISOYEAR FROM timestamp) 的一個偏移一的結果。
  • 防止在 pg_hba.conf 檔案中不必要地將 RADIUS 身份驗證參數轉換為小寫並截斷。
  • 對 GSSAPI 支援的幾個修復,包括讓 libpq 接受所有與 GSS 相關的連線參數,即使 GSSAPI 代碼未編譯進來。
  • 在並行模式下執行 pg_dumppg_restore 的幾個修復。
  • 修復了當嘗試在遠端伺服器上執行遠端查詢(例如 UPDATE remote_tab SET (x,y) = (SELECT ...))時,postgres_fdw 崩潰的問題。
  • 不允許 contrib/tablefunccrosstab() 函數中使用 NULL 類別值,以防止崩潰。
  • Windows 的幾個修復,包括一個可能導致 NOTIFY 的時序異常的競爭條件。
  • 幾個 ecpg 修復。

如需完整的變更清單,請查看發行說明

更新

所有的 PostgreSQL 更新版本都是累積性的。如同其他的小版本更新,使用者不需要傾印和重新載入資料庫,或是使用 pg_upgrade 來套用這個更新版本;您可以直接關閉 PostgreSQL 然後更新其二進位檔案。

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

如果您之前在分割資料表的子分割區上執行過 TRUNCATE ... CASCADE,且該分割資料表有來自另一個資料表的外鍵參照,則您可能需要在另一個資料表上執行 TRUNCATE,或者如果您自執行 TRUNCATE ... CASCADE 以來已新增資料列,則執行 DELETE。 導致此問題的原因已在此版本中修正,但您需要執行此步驟以確保您的所有資料都已清除。

更多詳細資訊,請參閱發布說明

連結