PostgreSQL 11.2、10.7、9.6.12、9.5.16 和 9.4.21 已發布!

發布於 2019-02-14,由 PostgreSQL 全球開發團隊
PostgreSQL 專案

PostgreSQL 全球開發團隊已發布我們資料庫系統所有支援版本的更新,包括 11.2、10.7、9.6.12、9.5.16 和 9.4.21。此版本變更了 PostgreSQL 與 fsync() 介面的行為,並包含分區的修復以及過去三個月報告的 70 多個其他錯誤。

使用者應計畫在下次排定的停機時間套用此更新。

重點:fsync() 行為的變更

當作業系統中可用並在組態檔中啟用時(預設啟用),PostgreSQL 會使用核心函數 fsync() 以協助確保資料寫入磁碟。在某些提供 fsync() 的作業系統中,當核心無法寫出資料時,它會傳回失敗並清除其資料緩衝區中應寫入的資料。

對於 PostgreSQL 而言,此清除操作有一個不幸的副作用:如果 PostgreSQL 再次嘗試透過再次呼叫 fsync() 將資料寫入磁碟,fsync() 將回報成功,但 PostgreSQL 認為已儲存到磁碟的資料實際上不會被寫入。這會產生可能的資料損毀情境。

此更新修改了 PostgreSQL 處理 fsync() 失敗的方式:PostgreSQL 將不再重試呼叫 fsync(),而是會 panic。在這種情況下,PostgreSQL 可以從預寫日誌 (WAL) 重播資料,以協助確保資料已寫入。雖然這可能看起來不是最佳的解決方案,但目前幾乎沒有其他替代方案,並且根據報告,問題案例極為罕見。

新增了一個新的伺服器參數 data_sync_retry 來管理此行為。如果您確定您的核心在此類情境下不會丟棄髒資料緩衝區,您可以將 data_sync_retry 設為 on 以恢復舊的行為。

錯誤修復和改進

此更新引入了封裝版本說明的方式的變更。 從此更新開始,所有目前支援的 PostgreSQL 版本將僅包含其主要版本特定的版本說明。 例如,PostgreSQL 11 僅封裝版本 11.2、11.1 和 11.0 的版本說明。 不支援版本(PostgreSQL 9.3 及更早版本)的版本說明將在舊版本中提供,並可從 PostgreSQL 網站上即將發布的檔案中取得。

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

其中一些修復包括

  • 修復了在分割表上使用具有 INCLUDE 欄位的唯一索引的處理方式
  • 確保分割表的 NOT NULL 限制在其分割區內得到遵守
  • 分割表上的一些限制的修復
  • 修復了將 ON COMMIT DROPON COMMIT DELETE ROWS 應用於分割表和具有繼承子表的表的問題
  • 不允許在分割表上使用 COPY FREEZE
  • 使用不可為 Null 預設功能的 ALTER TABLE .. ADD COLUMN 的多項修復,包括可能的索引損毀案例
  • GIN 索引中的多項修復,包括避免與清理和並行索引插入發生死鎖(這部分還原了 PostgreSQL 10 中引入的效能改進)
  • 修復了使用索引表達式或述詞時,邏輯複製中可能發生的崩潰
  • 預寫日誌 (WAL) 的多項修復
  • 修復了在使用子-SELECT 的多個 SET 子句的 UPDATE 中可能發生的崩潰
  • 修復了將零列提供給 json[b]_populate_recordset()json[b]_to_recordset() 時發生的崩潰
  • 與排序規則處理相關的多項修復,包括在 CALL 語句的引數中解析排序規則敏感表達式
  • 查詢規劃器的多項修復,包括改進大型繼承或分割表群組的規劃速度
  • TRUNCATE 的多項修復
  • 確保正確處理 ALTER TABLE ONLY ADD COLUMN IF NOT EXISTS
  • 允許在熱備用(複本)模式下使用 UNLISTEN
  • 修復了 pg_hba.conf 中 LDAP 驗證項目的 ldapserver 參數中以空格分隔的主機名稱列表的解析
  • ecpg 的多項修復
  • psql 的多項修復,包括使 \g targetCOPY TO STDOUT 搭配使用
  • 當指定 --random-seed=N 時,pgbench 的隨機數生成現在是完全確定性的且與平台無關
  • 修復了 pg_basebackuppg_verify_checksums 以適當地忽略暫存檔
  • pg_dump 的多項修復,包括存在 ALTER INDEX SET STATISTICS 命令
  • 防止由內嵌壓縮資料引起的來自 contrib/amcheck 的錯誤索引損毀報告
  • 支援新的 Makefile 變數以協助建構擴充功能

此更新還包含 tzdata 版本 2018i,用於哈薩克、梅特拉卡特拉和聖多美普林西比的 DST 法律變更。 哈薩克的克孜勒奧爾達區分為兩部分,建立一個新區 Asia/Qostanay,因為某些地區沒有變更 UTC 偏移量。 香港和無數太平洋島嶼的歷史修正。

更新

所有 PostgreSQL 更新版本都是累積的。 與其他次要版本一樣,使用者不需要傾印和重新載入其資料庫,也不需要使用 pg_upgrade 即可套用此更新版本; 您可以簡單地關閉 PostgreSQL 並更新其二進位檔案。

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

PostgreSQL 9.4 將於 2020 年 2 月 13 日停止接收修復。 請參閱我們的版本控制政策以取得更多資訊。

連結