支援的版本:目前 (17) / 16 / 15 / 14
開發版本:devel

pg_amcheck

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

對於每個檢查的具有唯一約束的索引,使用 amcheckcheckunique 選項驗證重複條目中是否沒有多個條目在索引中可見。

--heapallindexed

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

--parent-check

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

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

--rootdescend

對於每個檢查的索引,使用 amcheckrootdescend 選項,透過從每個元組的根頁面執行新的搜尋,在葉子層級上重新尋找元組。

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

最初編寫此驗證形式是為了協助開發 btree 索引功能。它在協助檢測實際發生的損毀類型方面可能用途有限,甚至沒有用途。它也可能導致損毀檢查花費更長的時間,並在伺服器上消耗更多的資源。

警告

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

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

-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 指定是否在診斷訊息中使用顏色。可能的值為 alwaysautonever

注意事項

pg_amcheck 旨在與 PostgreSQL 14.0 及更高版本一起使用。

另請參閱

amcheck

提交更正

如果您在文件中發現任何不正確、與特定功能的使用體驗不符,或需要進一步釐清的地方,請使用此表單來報告文件問題。