vacuumlo — PostgreSQLデータベースから孤児となったラージオブジェクトを削除する
vacuumlo
[option
...] dbname
...
vacuumloはPostgreSQLデータベースから「孤児になった」ラージオブジェクトをすべて削除する、単純なユーティリティです。
データベース内でoid
またはlo
データ型列内にまったく現れないOIDを持つすべてのラージオブジェクト(LO)を「孤児になった」LOとみなします。
これを使用する場合にはまた、loモジュール内のlo_manage
トリガに興味を持つかもしれません。
lo_manage
は初期段階で孤児になったLOの生成を防止しようと試みます。
コマンドラインで指名された全てのデータベースに対して処理が行われます。
vacuumloは以下のコマンドライン引数を受け付けます。
-l
limit
1トランザクションに付き、limit
個(デフォルトは1000)より多くのラージオブジェクトを削除しません。
サーバは削除されるLO毎に一つのロックを取得するため、多数のLOの削除を1トランザクションで行う場合、max_locks_per_transactionを超える恐れがあります。
もし1トランザクションで全ての削除を行いたい場合は、このlimit値を0に指定してください。
-n
ラージオブジェクトの削除を行わず、単に何が行われるはずかを示します。
-v
多くの進行メッセージを出力します。
-V
--version
vacuumloのバージョンを表示し終了します。
-?
--help
vacuumloのコマンドライン引数に関するヘルプを表示し終了します。
vacuumloは接続パラメータとして以下のコマンドライン引数も受け付けます。
-h
hostname
データベースサーバのホスト名です。
-p
port
データベースサーバのポート番号です。
-U
username
接続ユーザ名です。
-w
--no-password
パスワード入力のプロンプトを出しません。
もし、サーバがパスワード認証を必要としており、.pgpass
ファイルを用いる様な、プロンプト入力とは別の手段を通してパスワードを利用できない場合は、接続に失敗します。
このオプションは、バッチ処理やスクリプト処理の様なパスワードを入力するユーザがいないケースで役に立つかもしれません。
-W
vacuumloは強制的にデータベースに接続する前にパスワード入力を促します。
サーバがパスワード認証を要求する場合vacuumloは自動的にパスワード入力を促しますので、これが重要になることはありません。
しかし、vacuumloは、サーバにパスワードが必要かどうかを判断するための接続試行を無駄に行います。
こうした余計な接続試行を防ぐために-W
の入力が有意となる場合もあります。
vacuumloは下記の手法で動作します。
まずvacuumloは選択されたデータベース内のラージオブジェクトのOIDをすべて含む一時テーブルを構築します。
そしてデータベース内でoid
型またはlo
型を型として持つ全列をスキャンし、一時テーブルから一致する項目を削除します。
(注意:これらの名前の型のみが対象となります。特に、これらの型を伴ったドメインなどはスキャン対象にはなりませんので注意が必要です。)
一時テーブルに残った項目を孤児LOと識別します。
これらが削除されます。
Peter Mount <peter@retep.org.uk>