★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

pg_amcheck

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

検査しているインデックスごとに、amcheckheapallindexedオプションを使ってすべてのヒープタプルがインデックス中のインデックスタプルとして存在していることを検証します。

--parent-check

検査しているBツリーインデックスごとに、インデックス検査中に親/子関係の追加の検査を行うamcheckbt_index_parent_check関数を使います。

デフォルトではamcheckbt_index_check関数を使いますが、--rootdescendオプションを使うと暗黙的にbt_index_parent_checkを選択することに注意してください。

--rootdescend

検査しているインデックスごとに、amcheckrootdescendオプションを使い、各タプルに関してルートページから新たに検索を実施してリーフレベルのタプルを再発見します。

このオプションを使うと--parent-checkオプションも暗黙的に選択します。

この形式の検証は、元々はBツリーインデックスの機能の開発を支援するために作られました。 実際に発生する類の破損を検出するための支援としては限定的、あるいはまったく無用かも知れません。 また、これは破損検査に要する時間がかなり長くなったり、サーバでかなり多くのリソースを消費する原因になるかも知れません。

警告

--parent-checkオプション、あるいは--rootdescendオプションが指定された時にBツリーインデックスに対して行われる追加の検査では、比較的強いリレーションレベルのロックが必要です。 この検査だけが、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を標準出力にそのまま表示します。

-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_amcheckPostgreSQL 14.0以降で動作するように設計されています。

関連項目

amcheck