PostgreSQL 全球開發團隊發布了對我們資料庫系統所有支援版本的更新,包括 9.6.2、9.5.6、9.4.11、9.3.16 和 9.2.20。此版本包含修復,可防止索引建立以及某些預寫式日誌重播情況下的資料損毀問題,詳情如下。它還修補了過去三個月中報告的 75 多個其他錯誤。
使用者應計畫在下一次排定的停機時間套用此更新。
如果對先前未建立索引的欄位呼叫 CREATE INDEX CONCURRENTLY,則存在競爭條件,然後由與 CREATE INDEX CONCURRENTLY 命令同時執行的交易更新的列可能會被錯誤地建立索引。
如果您懷疑可能發生這種情況,最可靠的解決方案是在安裝此更新後重建受影響的索引。
此問題存在於 PostgreSQL 的 9.2、9.3、9.4、9.5 和 9.6 系列中。
此版本包含多項修復,可提高可見資料和 WAL 日誌的穩定性,我們希望在此強調。
在此版本之前,當用於目錄掃描的特殊快照目前可用時,資料可能會被 vacuum 操作過早刪除。具體來說,vacuum 操作不會知道此特殊快照的最舊 xmin。錯誤會顯示類似以下的訊息
"cache lookup failed for relation 1255"
此版本可確保 vacuum 操作會將目錄掃描快照納入考量。
此外,還有多項修復可提高預寫式日誌記錄的穩定性,包括
這些問題存在於 PostgreSQL 9.6 系列版本中,也可能存在於 9.2、9.3、9.4 和 9.5 系列中。
此更新還修復了過去幾個月報告的許多錯誤。其中一些問題僅影響 9.6 系列,但許多問題影響所有支援的版本。此版本提供了 75 多個修復,包括
將時區資料檔案更新到 tzdata 版本 2016j,以處理北賽普勒斯(新增 Asia/Famagusta 新時區)、俄羅斯(新增 Europe/Saratov 新時區)、東加和南極洲/凱西的 DST 法律變更。義大利、哈薩克、馬爾他和巴勒斯坦的歷史修正。切換為優先使用東加的數字時區縮寫。
所有 PostgreSQL 更新版本都是累加的。與其他次要版本一樣,使用者不需要轉儲和重新載入其資料庫或使用 pg_upgrade 即可套用此更新版本;您可以簡單地關閉 PostgreSQL 並更新其二進位檔案。
如果您認為您受到了上述 CREATE INDEX CONCURRENTLY 錯誤的影響,則必須重建索引。以下是如何在生產系統中重建索引而不失去使用索引能力的範例
CREATE INDEX CONCURRENTLY new_index_name ON table_name (column_name);
DROP INDEX CONCURRENTLY old_index_name;
ALTER INDEX new_index_name RENAME TO old_index_name;
請注意,使用此方法意味著您會暫時擁有相同索引的兩個副本,因此如果磁碟空間是個問題,您可能需要採取其他方法。
跳過一個或多個更新版本的使用者可能需要執行其他更新後步驟;有關詳細資訊,請參閱早期版本的版本說明。
連結