pg_amcheck — 一つ以上のPostgreSQLデータベースに破損がないかどうかを検査する
pg_amcheck
[option
...] [dbname
]
pg_amcheckは、一つ以上のデータベースに対して、どのスキーマ、テーブル、インデックスを検査すべきか、どの種類の検査を実行するか、検査を並列に行うかどうか、並列に行うなら並列接続をいくつ確立するかを指定してamcheckの破損検査関数を実行します。
テーブルリレーションとBツリーインデックスのみが今の所サポートされています。 他のリレーションタイプは暗黙のうちにスキップされます。
dbname
を指定するときは、検査すべき単一のデータベース名であるべきで、他のデータベースを選択するオプションは指定すべきではありません。
そうではなくてデータベースの選択オプションが指定されていると、一致するデータベースがすべて検査されます。
オプションを指定しない場合は、デフォルトのデータベースが検査されます。
データベース選択オプションには次のものが含まれます。
--all
、--database
、--exclude-database
。
また、次のオプションも含まれます。
--relation
、--exclude-relation
、--table
、--exclude-table
、--index
、--exclude-index
。
しかし、これらのオプションは、3つの部分からなるパターン(つまりmydb*.myschema*.myrel*
)を指定したときにのみ使用できます。
最後に、2つの部分からなるパターン(つまりmydb*.myschema*
)を指定した時に使用できる--schema
と--exclude-schema
があります。
dbname
は、接続文字列でも構いません。
以下のコマンドラインオプションは、何を検査するかを制御します。
-a
--all
--exclude-database
で除外したものを除くすべてのデータベースを検査します。
-d pattern
--database=pattern
--exclude-database
で除外したものを除き、指定したパターン
にマッチするデータベースを検査します。
このオプションは2回以上指定できます。
-D pattern
--exclude-database=pattern
与えられたパターン
にマッチするデータベースを除外します。
このオプションは2回以上指定できます。
-i pattern
--index=pattern
除外されていない限り、指定したパターン
にマッチするインデックスを検査します。
このオプションは2回以上指定できます。
これは、インデックスにのみ適用され、テーブルには適用されないことを除いて--relation
オプションに類似しています。
-I pattern
--exclude-index=pattern
与えられたパターン
にマッチするインデックスを除外します。
このオプションは2回以上指定できます。
これは、インデックスにのみ適用され、テーブルには適用されないことを除いて--exclude-relation
オプションに類似しています。
-r pattern
--relation=pattern
除外されていない限り、パターン
にマッチするリレーションを検査します。
このオプションは2回以上指定できます。
パターンはたとえばmyrel*
のように修飾されていなくても、myschema*.myrel*
のようにスキーマ修飾されていても、mydb*.myscheam*.myrel*
のようにデータベース及びスキーマ修飾されていても構いません。
データベース修飾パターンは、マッチするデータベースを検査対象のデータベースのリストに追加します。
-R pattern
--exclude-relation=pattern
指定されたパターン
にマッチするリレーションを除外します。
このオプションは2回以上指定できます。
--relation
におけるのと同様、パターン
は修飾なし、スキーマ修飾、スキーマとデータベース修飾のどれでも構いません。
-s pattern
--schema=pattern
除外されていない限り、指定したパターン
にマッチするスキーマ内のテーブルとインデックスを検査します。
このオプションは2回以上指定できます。
特定のパターンにマッチするスキーマ内のテーブルだけを選択するには、--table=SCHEMAPAT.* --no-dependent-indexes
のような使い方を考慮してください。
インデックスのみを選択するには、--index=SCHEMAPAT.*
のような使い方を考慮してください。
スキーマパターンはデータベース修飾でも構いません。
たとえば、mydb*
にマッチするデータベース内のmyschema*
にマッチするスキーマを選択するには、--schema=mydb*.myschema*
のように書くことができます。
-S pattern
--exclude-schema=pattern
指定したパターン
にマッチするスキーマ内のテーブルとインデックスを除外します。
このオプションは2回以上指定できます。
--schema
と同様、パターンはデータベース修飾でも構いません。
-t pattern
--table=pattern
除外されていない限り、指定したパターン
にマッチするスキーマ内のテーブルを検査します。
このオプションは2回以上指定できます。
これは、テーブルにのみ適用され、インデックスには適用されないことを除いて--relation
オプションに類似しています。
-T pattern
--exclude-table=pattern
指定したパターン
にマッチするテーブルを除外します。
このオプションは2回以上指定できます。
これは、テーブルにのみ適用され、インデックスには適用されないことを除いて--exclude-relation
オプションに類似しています。
--no-dependent-indexes
デフォルトでは、--index
や--relation
オプションで明示的に選択されていなくても、テーブルが検査される際にそのテーブルのBツリーインデックスも検査されます。
このオプションはこの振る舞いを抑止します。
--no-dependent-toast
デフォルトでは、--table
や--relation
オプションで明示的に選択されていなくても、テーブルが検査される際にそのテーブルのトーストテーブルも検査されます。
このオプションはこの振る舞いを抑止します。
--no-strict-names
デフォルトでは、--database
、--table
、--index
、--relation
への引数がどのオブジェクトにもマッチしなければ、フェイタルエラーが起こります。
このオプションはそのエラーをワーニングへと格下げします。
次のコマンドラインオプションはテーブルの検査を制御します。
--exclude-toast-pointers
デフォルトでは、テーブル中のトーストポインタに遭遇すると必ずトーストテーブル中の明らかに有効なエントリを参照していることを確認するために検索が行われます。 このチェックは非常に遅くなることがあり、このオプションはこれを省略するために使うことができます。
--on-error-stop
破損が見つかった最初のテーブルのページに関してすべての破損の報告を行った後そのテーブルリレーションの処理を中断し、次のテーブルあるいはインデックスに進みます。
インデックスの検査は、最初の破損したページの後で常に停止することに留意してください。 このオプションは、テーブルリレーションに関してのみ意味があります。
--skip=option
all-frozen
が与えられると、テーブル破損検査は、すべて凍結されていると印が付いたすべてのテーブルの中のページをスキップします。
all-visible
が与えられると、テーブル破損検査は、すべて可視と印が付いたすべてのテーブルの中のページをスキップします。
デフォルトではページをスキップすることはありません。
none
と指定することもできますが、これがデフォルトなのでそのように指定する必要はありません。
--startblock=block
指定したブロック番号から検査を開始します。
検査しているテーブルリレーションのブロック数がこのブロック数よりも小さければエラーが生じます。
このオプションはインデックスには適用されず、おそらく単一のテーブルリレーションを検査するときにのみ意味があるでしょう。
それ以外の警告については--endblock
を参照してください。
--endblock=block
指定したブロック番号で検査を終了します。
検査しているテーブルリレーションのブロック数がこのブロック数よりも小さければエラーが生じます。
このオプションはインデックスには適用されず、おそらく単一のテーブルリレーションを検査するときにのみ意味があるでしょう。
通常のテーブルとトーストテーブルの両方が検査される際にはこのオプションはその両方に適用されますが、--exclude-toast-pointers
を使って抑止していない限りトーストポインタを検証中により大きな番号のブロックがアクセスされるかも知れません。
以下のコマンドラインオプションはBツリーインデックスの検査を制御します。
--heapallindexed
検査しているインデックスごとに、amcheckのheapallindexed
オプションを使ってすべてのヒープタプルがインデックス中のインデックスタプルとして存在していることを検証します。
--parent-check
検査しているBツリーインデックスごとに、インデックス検査中に親/子関係の追加の検査を行うamcheckのbt_index_parent_check
関数を使います。
デフォルトではamcheckのbt_index_check
関数を使いますが、--rootdescend
オプションを使うと暗黙的にbt_index_parent_check
を選択することに注意してください。
--rootdescend
検査しているインデックスごとに、amcheckのrootdescend
オプションを使い、各タプルに関してルートページから新たに検索を実施してリーフレベルのタプルを再発見します。
このオプションを使うと--parent-check
オプションも暗黙的に選択します。
この形式の検証は、元々はBツリーインデックスの機能の開発を支援するために作られました。 実際に発生する類の破損を検出するための支援としては限定的、あるいはまったく無用かも知れません。 また、これは破損検査に要する時間がかなり長くなったり、サーバでかなり多くのリソースを消費する原因になるかも知れません。
--parent-check
オプション、あるいは--rootdescend
オプションが指定された時にBツリーインデックスに対して行われる追加の検査では、比較的強いリレーションレベルのロックが必要です。
この検査だけが、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を標準出力にそのまま表示します。
-j num
--jobs=num
サーバへのnum
並列接続か、検査対象オブジェクト1つにつき1本の接続のどちらか少ない方を使います。
デフォルトでは単一の接続を使います。
-P
--progress
進捗状況の情報を表示します。 進捗状況情報には、検査が完了したリレーションの数と(検査が完了した)リレーションの合計サイズが含まれます。 最終的に検査されるリレーションの全数と(これら(最終的に検査される)の)リレーションのサイズの見積もりも含まれます。
-v
--verbose
より多くのメッセージを表示します。 とりわけ、これは検査している個々のリレーションを表示し、サーバエラーに関しては詳細度のレベルを上げます。
-V
--version
pg_amcheckのバージョンを表示して終了します。
--install-missing
--install-missing=schema
データベースを検査するのに必要な拡張で漏れているものをインストールします。
もしまだインストールされていなければ、各拡張のオブジェクトは与えられたschema
、あるいは指定されていなければpg_catalog
スキーマにインストールされます。
今の所唯一必要な拡張はamcheckです。
-?
--help
pg_amcheckコマンド行引数に関するヘルプを表示して終了します。
pg_amcheck はPostgreSQL 14.0以降で動作するように設計されています。