PostgreSQL Global Development Group 已經發布 PostgreSQL 14.4,以修復在使用 CREATE INDEX CONCURRENTLY
或 REINDEX CONCURRENTLY
指令時,可能導致靜默資料損毀的問題。請參閱以下章節,了解如何偵測和更正索引中的靜默資料損毀。
此版本還修復了自 5 月發布 PostgreSQL 14.3 以來的 15 多個錯誤。有關變更的完整列表,請查看發布說明。
此版本僅適用於 PostgreSQL 14。 PostgreSQL Global Development Group 將於 2022 年 8 月 11 日對所有支援的 PostgreSQL 版本 (10 - 14) 進行定期更新發布。
PostgreSQL 14.4 修復了 CREATE INDEX CONCURRENTLY
和 REINDEX CONCURRENTLY
的一個問題,該問題可能導致索引的靜默資料損毀。 在修復之前,CREATE INDEX CONCURRENTLY
和 REINDEX CONCURRENTLY
可能會建立缺少條目的索引,導致使用該索引的 SELECT
查詢找不到某些列。 此問題可能沒有損毀您的索引,但如果您不確定,我們建議您按照以下說明重新建立索引。
您可以使用帶有 --heapallindexed
標誌的 pg_amcheck
指令來偵測 B 樹索引(預設索引類型)是否發生資料損毀。 例如
pg_amcheck --heapallindexed database
如果 pg_amcheck
偵測到損毀,或者您在任何其他索引類型(例如 GiST、GIN 等)上執行了 CREATE INDEX CONCURRENTLY
或 REINDEX CONCURRENTLY
,請按照以下說明操作。
將系統升級到 PostgreSQL 14.4 後,您可以使用 REINDEX CONCURRENTLY
修復任何靜默資料損毀。 例如,如果您有一個名為 elephant_idx
且發生資料損毀的索引,則可以在 PostgreSQL 14.4 上執行以下指令來修復它
REINDEX CONCURRENTLY elephant_idx;
您可以使用 reindexdb
指令重新建立叢集中所有索引的索引。 reindexdb
還有一個 --jobs
標誌,可讓您並行執行重新建立索引操作。 例如,要使用 <N>
個並行作業重新建立整個 PostgreSQL 叢集的索引,您可以執行以下指令
reindexdb --all --concurrently --jobs <N>
此更新修復了過去幾個月報告的 15 多個錯誤。 以下列出的問題會影響 PostgreSQL 14。
包含在此版本中
GROUPING
函數中引用的子 SELECT
時的「在子計畫目標列表中找不到變數」規劃器錯誤。SQL_ASCII
但客戶端編碼為多位元組編碼時,COPY FROM
中的錯誤檢查。CREATE OPERATOR CLASS
產生)。wal_receiver_timeout
。pg_amcheck
中伺服器連線遺失後崩潰。有關可用的變更的完整列表,請查看發布說明。
所有 PostgreSQL 更新版本都是累積性的。與其他小版本一樣,使用者無需轉儲和重新載入其資料庫或使用 pg_upgrade
即可應用此更新版本;您可以簡單地關閉 PostgreSQL 並更新其二進位檔案。
但是,如果您在 PostgreSQL 14 上執行了 CREATE INDEX CONCURRENTLY
或 REINDEX CONCURRENTLY
,您可能需要採取其他步驟。 請查看「偵測和修復 CREATE INDEX CONCURRENTLY
/ REINDEX CONCURRENTLY
損毀」部分以了解更多詳細資訊。
跳過一個或多個更新版本的使用者可能需要執行其他更新後步驟;請參閱先前版本的發布說明以了解詳細資訊。
有關更多詳細資訊,請參閱發布說明。
PostgreSQL 10 將於 2022 年 11 月 10 日停止接收修復程式。 如果您在生產環境中運行 PostgreSQL 10,我們建議您制定升級到更新、受支援的 PostgreSQL 版本的計畫。 請參閱我們的版本控制政策以取得更多資訊。