pg_amcheck — 檢查一個或多個 PostgreSQL 資料庫中的損毀
pg_amcheck
[選項
...] [資料庫名稱
]
pg_amcheck 支援針對一個或多個資料庫執行 amcheck 的損毀檢查函式,並提供選項來選擇要檢查的綱要、表格和索引,要執行的檢查種類,以及是否要平行執行檢查,如果是,則建立和使用的平行連線數。
目前僅支援一般表格關係和 TOAST 表格關係、實體化檢視、序列和 B 樹索引。其他關係類型會被默默跳過。
如果指定了 資料庫名稱
,則它應該是要檢查的單一資料庫的名稱,並且不應存在其他資料庫選擇選項。否則,如果存在任何資料庫選擇選項,將會檢查所有符合的資料庫。如果不存在此類選項,將會檢查預設資料庫。資料庫選擇選項包括 --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
預設情況下,如果檢查某個資料表,該資料表的任何 btree 索引也會被檢查,即使它們沒有透過諸如 --index
或 --relation
等選項明確選取。此選項會抑制此行為。
--no-dependent-toast
預設情況下,如果檢查某個資料表,則其 toast 資料表(如果有的話)也會被檢查,即使它沒有透過諸如 --table
或 --relation
等選項明確選取。此選項會抑制此行為。
--no-strict-names
預設情況下,如果 --database
、--table
、--index
或 --relation
的引數沒有匹配任何物件,則會發生致命錯誤。此選項會將該錯誤降級為警告。
以下命令列選項控制資料表的檢查
--exclude-toast-pointers
預設情況下,每當在資料表中遇到 toast 指標時,都會執行查閱以確保它引用 toast 資料表中明顯有效的條目。這些檢查可能非常慢,並且可以使用此選項來跳過它們。
--on-error-stop
在報告找到損毀的資料表的第一頁上的所有損毀後,停止處理該資料表關聯,然後繼續處理下一個資料表或索引。
請注意,索引檢查總是在第一個損毀頁面後停止。此選項僅對資料表關聯有意義。
--skip=option
如果指定 all-frozen
,則資料表損毀檢查將跳過所有標記為 all frozen 的資料表中的頁面。
如果指定 all-visible
,則資料表損毀檢查將跳過所有標記為 all visible 的資料表中的頁面。
預設情況下,不跳過任何頁面。這可以指定為 none
,但由於這是預設值,因此無需提及。
--startblock=block
從指定的區塊編號開始檢查。如果正在檢查的資料表關聯的區塊數少於此編號,則會發生錯誤。此選項不適用於索引,並且可能僅在檢查單個資料表關聯時才有用。有關更多注意事項,請參閱 --endblock
。
--endblock=block
在指定的區塊編號結束檢查。如果正在檢查的資料表關聯的區塊數少於此編號,則會發生錯誤。此選項不適用於索引,並且可能僅在檢查單個資料表關聯時才有用。如果同時檢查一般資料表和 toast 資料表,則此選項將同時適用於兩者,但是在驗證 toast 指標時,可能仍然會存取較高編號的 toast 區塊,除非使用 --exclude-toast-pointers
抑制這種情況。
以下命令列選項控制 B-tree 索引的檢查
--checkunique
對於每個檢查的具有唯一約束的索引,使用 amcheck 的 checkunique
選項驗證重複條目中是否沒有多個條目在索引中可見。
--heapallindexed
對於每個檢查的索引,使用 amcheck 的 heapallindexed
選項驗證索引中是否存在所有堆積元組作為索引元組。
--parent-check
對於每個檢查的 btree 索引,使用 amcheck 的 bt_index_parent_check
函式,該函式在索引檢查期間執行對父/子關係的額外檢查。
預設是使用 amcheck 的 bt_index_check
函式,但是請注意,使用 --rootdescend
選項會隱式地選擇 bt_index_parent_check
。
--rootdescend
對於每個檢查的索引,使用 amcheck 的 rootdescend
選項,透過從每個元組的根頁面執行新的搜尋,在葉子層級上重新尋找元組。
使用此選項也會隱式地選擇 --parent-check
選項。
最初編寫此驗證形式是為了協助開發 btree 索引功能。它在協助檢測實際發生的損毀類型方面可能用途有限,甚至沒有用途。它也可能導致損毀檢查花費更長的時間,並在伺服器上消耗更多的資源。
當指定 --parent-check
選項或 --rootdescend
選項時,對 B-tree 索引執行的額外檢查需要相對較強的關係層級鎖定。這些檢查是唯一會阻止來自 INSERT
、UPDATE
和 DELETE
命令的並行資料修改的檢查。
以下命令列選項控制與伺服器的連線
-h hostname
--host=hostname
指定伺服器執行的機器的主機名稱。如果該值以斜線開頭,則將其用作 Unix 網域通訊端的目錄。
-p port
--port=port
指定伺服器正在接聽連線的 TCP 連接埠或本機 Unix 網域通訊端檔案擴充功能。
-U
--username=username
要連線的使用者名稱。
-w
--no-password
絕不發出密碼提示。如果伺服器需要密碼驗證,並且無法透過其他方式(例如 .pgpass
檔案)取得密碼,則連線嘗試將會失敗。此選項在沒有使用者可輸入密碼的批次作業和指令碼中很有用。
-W
--password
強制 pg_amcheck 在連線到資料庫之前提示輸入密碼。
此選項並非必要,因為如果伺服器要求密碼驗證,pg_amcheck 將會自動提示輸入密碼。但是,pg_amcheck 將會浪費一次連線嘗試來找出伺服器想要密碼。在某些情況下,值得輸入 -W
以避免額外的連線嘗試。
--maintenance-db=dbname
指定用於探索要檢查的資料庫清單的資料庫或連線字串。如果未使用 --all
或任何包含資料庫模式的選項,則不需要此類連線,並且此選項無效。否則,此選項的值中包含的任何連線字串參數(資料庫名稱除外)也將在連線到要檢查的資料庫時使用。如果省略此選項,則預設值為 postgres
,如果失敗,則為 template1
。
還有其他選項可用
-e
--echo
將傳送到伺服器的所有 SQL 回顯到 stdout。
-j num
--jobs=num
使用 num
個並行連線到伺服器,或每個要檢查的物件一個連線,以較小者為準。
預設是使用單一連線。
-P
--progress
顯示進度資訊。進度資訊包含已完成檢查的關聯數量,以及這些關聯的總大小。它也包含最終將被檢查的關聯總數,以及這些關聯的預估大小。
-v
--verbose
印出更多訊息。特別是,這會印出每個正在檢查的關聯的訊息,並且會增加伺服器錯誤顯示的詳細程度。
-V
--version
印出 pg_amcheck 的版本並結束。
--install-missing
--install-missing=schema
安裝檢查資料庫所需的任何遺失的擴充功能。如果尚未安裝,每個擴充功能的物件將會安裝到指定的 schema
,如果未指定,則安裝到 schema pg_catalog
。
目前,唯一需要的擴充功能是 amcheck。
-?
--help
顯示關於 pg_amcheck 命令列引數的說明並結束。
如同大多數其他的 PostgreSQL 工具,pg_amcheck
也使用 libpq 支援的環境變數(請參閱 Section 32.15)。
環境變數 PG_COLOR
指定是否在診斷訊息中使用顏色。可能的值為 always
、auto
和 never
。
pg_amcheck 旨在與 PostgreSQL 14.0 及更高版本一起使用。
如果您在文件中發現任何不正確、與特定功能的使用體驗不符,或需要進一步釐清的地方,請使用此表單來報告文件問題。