2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14
開發版本: devel

pg_amcheck

pg_amcheck — 檢查一個或多個 PostgreSQL 資料庫中的損壞情況

概要

pg_amcheck [選項...] [資料庫名]

描述

pg_amcheck 支援對一個或多個數據庫執行 amcheck 的損壞檢查函式,並提供選項來選擇要檢查的模式、表和索引,執行哪種型別的檢查,以及是否並行執行檢查,如果並行執行,則建立和使用的並行連線數。

目前只支援普通表和 TOAST 表關係、物化檢視、序列和 B-tree 索引。其他關係型別將被靜默跳過。

如果指定了 資料庫名,則它應該是要檢查的單個數據庫的名稱,並且不應存在其他資料庫選擇選項。否則,如果存在任何資料庫選擇選項,將檢查所有匹配的資料庫。如果不存在此類選項,將檢查預設資料庫。資料庫選擇選項包括 --all--database--exclude-database。它們還包括 --relation--exclude-relation--table--exclude-table--index--exclude-index,但僅當這些選項與三部分模式一起使用時(例如 mydb*.myschema*.myrel*)。最後,它們包括 --schema--exclude-schema,但僅當這些選項與兩部分模式一起使用時(例如 mydb*.myschema*)。

資料庫名 也可以是一個 連線字串

選項

以下命令列選項控制檢查內容

-a
--all

檢查所有資料庫,除非透過 --exclude-database 排除。

-d 模式
--database=模式

檢查與指定 模式 匹配的資料庫,除非被 --exclude-database 排除。此選項可以指定多次。

-D 模式
--exclude-database=模式

排除與給定 模式 匹配的資料庫。此選項可以指定多次。

-i 模式
--index=模式

檢查與指定 模式 匹配的索引,除非它們被其他方式排除。此選項可以指定多次。

這與 --relation 選項類似,只是它僅適用於索引,而不適用於其他關係型別。

-I 模式
--exclude-index=模式

排除與指定 模式 匹配的索引。此選項可以指定多次。

這與 --exclude-relation 選項類似,只是它僅適用於索引,而不適用於其他關係型別。

-r 模式
--relation=模式

檢查與指定 模式 匹配的關係,除非它們被其他方式排除。此選項可以指定多次。

模式可以是未限定的,例如 myrel*,也可以是模式限定的,例如 myschema*.myrel*,或者資料庫和模式限定的,例如 mydb*.myschema*.myrel*。資料庫限定的模式將新增匹配的資料庫到要檢查的資料庫列表中。

-R 模式
--exclude-relation=模式

排除與指定 模式 匹配的關係。此選項可以指定多次。

--relation 一樣,模式 可以是未限定的、模式限定的,或者資料庫和模式限定的。

-s 模式
--schema=模式

檢查與指定 模式 匹配的模式中的表和索引,除非它們被其他方式排除。此選項可以指定多次。

要僅選擇匹配特定模式的模式中的表,請考慮使用類似 --table=SCHEMAPAT.* --no-dependent-indexes 的方式。要僅選擇索引,請考慮使用類似 --index=SCHEMAPAT.* 的方式。

模式可以被資料庫限定。例如,您可以編寫 --schema=mydb*.myschema* 來選擇在匹配 mydb* 的資料庫中匹配 myschema* 的模式。

-S 模式
--exclude-schema=模式

排除與指定 模式 匹配的模式中的表和索引。此選項可以指定多次。

--schema 一樣,模式可以被資料庫限定。

-t 模式
--table=模式

檢查與指定 模式 匹配的表,除非它們被其他方式排除。此選項可以指定多次。

這與 --relation 選項類似,只是它僅適用於表、物化檢視和序列,而不適用於索引。

-T 模式
--exclude-table=模式

排除與指定 模式 匹配的表。此選項可以指定多次。

這與 --exclude-relation 選項類似,只是它僅適用於表、物化檢視和序列,而不適用於索引。

--no-dependent-indexes

預設情況下,如果檢查了表,那麼該表的任何 B-tree 索引也會被檢查,即使它們沒有被 --index--relation 等選項明確選擇。此選項將抑制此行為。

--no-dependent-toast

預設情況下,如果檢查了表,那麼它的 TOAST 表(如果存在)也會被檢查,即使它沒有被 --table--relation 等選項明確選擇。此選項將抑制此行為。

--no-strict-names

預設情況下,如果 --database--table--index--relation 的引數沒有匹配到任何物件,則會生成一個致命錯誤。此選項將該錯誤降級為警告。

以下命令列選項控制表的檢查

--exclude-toast-pointers

預設情況下,每當在表中遇到 TOAST 指標時,都會進行查詢,以確保它引用 TOAST 表中似乎有效的條目。這些檢查可能非常慢,可以使用此選項來跳過它們。

--on-error-stop

在報告了第一個出現損壞的表頁面上的所有損壞之後,停止處理該表關係,然後繼續處理下一個表或索引。

請注意,索引檢查總是會在第一個損壞的頁面後停止。此選項僅對錶關係有意義。

--skip=選項

如果給出 all-frozen,則表損壞檢查將跳過所有表中標記為“all frozen”的頁面。

如果給出 all-visible,則表損壞檢查將跳過所有表中標記為“all visible”的頁面。

預設情況下,不跳過任何頁面。這可以指定為 none,但由於這是預設設定,因此無需提及。

--startblock=塊號

從指定的塊號開始檢查。如果正在檢查的表關係擁有的塊數少於此數字,則會發生錯誤。此選項不適用於索引,並且可能僅在檢查單個表關係時有用。有關進一步的注意事項,請參閱 --endblock

--endblock=塊號

在指定的塊號結束檢查。如果正在檢查的表關係擁有的塊數少於此數字,則會發生錯誤。此選項不適用於索引,並且可能僅在檢查單個表關係時有用。如果同時檢查普通表和 TOAST 表,此選項將適用於兩者,但除非使用 --exclude-toast-pointers 停用,否則在驗證 TOAST 指標時仍可能訪問較高編號的 TOAST 塊。

以下命令列選項控制 B-tree 索引的檢查

--checkunique

對於每個具有唯一約束的索引,使用 amcheckcheckunique 選項,驗證索引中可見的重複項不超過一個。

--heapallindexed

對於每個檢查的索引,使用 amcheckheapallindexed 選項,驗證索引中是否存在所有堆元組作為索引元組。

--parent-check

對於每個檢查的 B-tree 索引,使用 amcheckbt_index_parent_check 函式,該函式在索引檢查期間執行額外的父/子關係檢查。

預設使用 amcheckbt_index_check 函式,但請注意,使用 --rootdescend 選項會隱式選擇 bt_index_parent_check

--rootdescend

對於每個檢查的索引,使用 amcheckrootdescend 選項,透過為每個元組從根頁面重新搜尋來查詢葉子級別的元組。

使用此選項還會隱式選擇 --parent-check 選項。

這種形式的驗證最初是為了幫助開發 B-tree 索引功能而編寫的。它在幫助檢測實際發生的損壞型別方面可能用途有限,甚至沒有用途。它還可能導致損壞檢查花費更長的時間並在伺服器上消耗更多的資源。

警告

當指定 --parent-check--rootdescend 選項時,對 B-tree 索引執行的額外檢查需要相對強的關係級別鎖。這些檢查是唯一會阻止 INSERTUPDATEDELETE 命令進行併發資料修改的檢查。

以下命令列選項控制與伺服器的連線

-h 主機名
--host=主機名

指定伺服器執行所在計算機的主機名。如果值以斜槓開頭,則用作 Unix 域套接字目錄。

-p
--port=

指定伺服器正在監聽連線的 TCP 埠或本地 Unix 域套接字副檔名。

-U
--username=使用者名稱

要連線的使用者。:

-w
--no-password

絕不發出密碼提示。如果伺服器需要密碼身份驗證且密碼不可用(例如透過 .pgpass 檔案),則連線嘗試將失敗。此選項在沒有使用者在場輸入密碼的批處理作業和指令碼中很有用。

-W
--password

強制 pg_amcheck 在連線到資料庫之前提示輸入密碼。

此選項永遠不是必需的,因為如果伺服器要求密碼身份驗證,pg_amcheck 會自動提示輸入密碼。但是,pg_amcheck 會浪費一次連線嘗試來發現伺服器需要密碼。在某些情況下,鍵入 -W 以避免額外的連線嘗試是有益的。

--maintenance-db=資料庫名

指定用於發現數據庫列表的資料庫或 連線字串。如果未使用 --all 或任何包含資料庫模式的選項,則不需要此類連線,並且此選項無效。否則,此選項值中包含的其他除資料庫名稱外的任何連線字串引數也將在連線到要檢查的資料庫時使用。如果省略此選項,則預設為 postgres,或者如果失敗,則為 template1

還提供其他選項

-e
--echo

將傳送到伺服器的所有 SQL 回顯到 stdout。

-j 數量
--jobs=數量

使用 數量 個併發連線到伺服器,或者每個要檢查的物件一個連線(取較小者)。

預設使用單個連線。

-P
--progress

顯示進度資訊。進度資訊包括已完成檢查的關係數量以及這些關係的總大小。它還包括最終將要檢查的關係總數以及這些關係的估計大小。

-v
--verbose

列印更多訊息。特別是,這會為每個正在檢查的關係列印一條訊息,並增加伺服器錯誤顯示的詳細程度。

-V
--version

列印 pg_amcheck 版本並退出。

--install-missing
--install-missing=模式

安裝檢查資料庫所需的任何缺失的擴充套件。如果尚未安裝,每個擴充套件的物件將安裝到給定的 模式 中,或者如果未指定,則安裝到 pg_catalog 模式中。

目前,唯一必需的擴充套件是 amcheck

-?
--help

顯示有關 pg_amcheck 命令列引數的幫助,然後退出。

環境變數

pg_amcheck 與大多數其他 PostgreSQL 工具一樣,也使用 libpq 支援的環境變數(請參閱 第 32.15 節)。

環境變數 PG_COLOR 指定是否在診斷訊息中使用顏色。可能的值為 alwaysautonever

註釋

pg_amcheck 設計用於與 PostgreSQL 14.0 及更高版本配合使用。

另請參閱

amcheck

提交更正

如果您在文件中發現任何不正確、與您的實際經驗不符或需要進一步澄清的內容,請使用 此表格 來報告文件問題。