vacuumdb — PostgreSQLデータベースの不要領域の回収と解析を行う
vacuumdb [connection-option...] [option...]
[
--table | -t
table
[( column [,...] )]
]
... [dbname]
vacuumdb [connection-option...] [option...] --all | -a
vacuumdbは、PostgreSQLデータベースの不要領域のクリーンアップを行うユーティリティです。 また、vacuumdbはPostgreSQLの問い合わせオプティマイザが使用する内部的な統計情報も生成します。
vacuumdbは、SQLコマンドVACUUMのラッパです。 このユーティリティを使っても、これ以外の方法でサーバにアクセスしてバキュームや解析を行っても特に違いは生じません。
vacuumdbでは、下記のコマンドライン引数を指定できます。
-a--all全てのデータベースに対してバキュームを行います。
[-d] dbname[--dbname=]dbname
不要領域のクリーンアップ、または、解析を行うデータベース名を指定します。
データベース名が指定されておらず、-a(または--all)も指定されていない場合、データベース名は環境変数PGDATABASEから読み取られます。
この変数も設定されていない場合は、接続時に指定したユーザ名が使用されます。
-e--echovacuumdbが生成し、サーバに送るコマンドをエコー表示します。
-f--full「完全な(full)」クリーンアップを行います。
-F--freeze積極的にタプルを「凍結」します。
-j njobs--jobs=njobs
njobs個のコマンドを同時に実行することで、vacuumまたはanalyzeコマンドを並列で実行します。
vacuumdbはデータベースに対するnjobs個の接続を開くので、max_connectionsの設定が、これらの接続を許容するだけ十分に大きくしてください。
このモードを-f(FULL)オプションと一緒に使うと、一部のシステムカタログが並列処理されてデッドロックのエラーを起こす場合があることに注意してください。
-q--quiet進行メッセージを表示しません。
-t table [ (column [,...]) ]--table=table [ (column [,...]) ]
tableのみをクリーンアップ/解析します。
列名は--analyzeや--analyze-onlyオプションがある場合にのみ設定できます。
複数の-tスイッチを記述することで複数のテーブルをバキュームすることができます。
列を指定する場合は、シェルから括弧をエスケープする必要があるでしょう (後述の例を参照してください)。
-v--verbose処理中に詳細な情報を表示します。
-V--versionvacuumdbのバージョンを表示し、終了します。
-z--analyzeオプティマイザが使用する、データベースの統計情報も算出します。
-Z--analyze-onlyオプティマイザにより使用される統計情報の計算のみを行います(バキュームを行いません)。
--analyze-in-stages
--analyze-onlyと同様、オプティマイザにより使用される統計情報の計算のみを行います(バキュームを行いません)。
利用可能な統計情報をより速く生成するため、異なる設定を使って複数回(現在は3回)の解析を行います。
このオプションは、ダンプからリストアした、あるいはpg_upgradeを使って新しくデータを入れたデータベースを解析する時に便利です。
このオプションでは、データベースを利用可能にするために、何らかの統計情報をできる限り速く作成しようとし、それから、引き続くステージで完全な統計情報を生成します。
-?--helpvacuumdbのコマンドライン引数の使用方法を表示し、終了します。
vacuumdbには、以下に記す接続パラメータ用のコマンドライン引数も指定することもできます。
-h host--host=hostサーバが稼働しているマシンのホスト名を指定します。 ホスト名がスラッシュから始まる場合、Unixドメインソケット用のディレクトリとして使用されます。
-p port--port=portサーバが接続を監視するTCPポートもしくはUnixドメインソケットファイルの拡張子を指定します。
-U username--username=username接続するユーザ名を指定します。
-w--no-password
パスワードの入力を促しません。
サーバがパスワード認証を必要とし、かつ、.pgpassファイルなどの他の方法が利用できない場合、接続試行は失敗します。
バッチジョブやスクリプトなどパスワードを入力するユーザが存在しない場合にこのオプションは有用かもしれません。
-W--passwordデータベースに接続する前に、vacuumdbは強制的にパスワード入力を促します。
サーバがパスワード認証を要求する場合vacuumdbは自動的にパスワード入力を促しますので、これが重要になることはありません。
しかし、vacuumdbは、サーバにパスワードが必要かどうかを判断するための接続試行を無駄に行います。
こうした余計な接続試行を防ぐために-Wの入力が有意となる場合もあります。
--maintenance-db=dbname
どのデータベースをバキュームしなければならないかを見つけ出すために接続するデータベースの名前を指定します。
指定されなければpostgresデータベースが使用され、もし存在しなければtemplate1が使用されます。
PGDATABASEPGHOSTPGPORTPGUSERデフォルトの接続パラメータです。
また、このユーティリティは、他のほとんどのPostgreSQLユーティリティと同様、libpqでサポートされる環境変数を使用します(34.14を参照してください)。
問題が発生した場合、考えられる原因とエラーメッセージについての説明はVACUUMとpsqlを参照してください。 データベースサーバは、指定したホストで稼働している必要があります。 また、libpqフロントエンドライブラリのデフォルトの設定や環境変数が適用されることに注意してください。
vacuumdbの実行中にはPostgreSQLサーバに何度も接続しなければならないことがありますが、この場合その度にパスワードが必要です。
そのような場合は~/.pgpassファイルを用意しておくと便利です。
詳細は34.15を参照してください。
testというデータベースをクリーンアップするには、下記のコマンドを実行します。
$vacuumdb test
bigdbという名前のデータベースのクリーンアップとオプティマイザ用の解析を行う場合には、下記のコマンドを実行します。
$vacuumdb --analyze bigdb
xyzzyという名前のデータベースのfooという1つのテーブルだけのクリーンアップと、そのテーブルのbarという1つの列にだけ対してオプティマイザ用の解析を行う場合には、下記のコマンドを実行します。
$vacuumdb --analyze --verbose --table='foo(bar)' xyzzy