pg_archivecleanupは、スタンバイサーバとして動作している際のWALファイルのアーカイブを消去するためのarchive_cleanup_commandとして使用されるように設計されています(項25.2参照)。 同時に、pg_archivecleanupはWALファイルのアーカイブを消去するためのスタンドアローンのプログラムとしても利用することができます。
pg_archivecleanupを使うためにスタンバイサーバを設定するには、以下をrecovery.conf設定ファイルに記述します。
archive_cleanup_command = 'pg_archivecleanup archivelocation %r'
archivelocationは、WALセグメントファイルを削除するディレクトリです。
archive_cleanup_commandで使用される場合、論理的に%rより前のすべてのWALファイルはarchivelocationから削除されます。 これによって、クラッシュ―リスタートの機能を維持するための、保持しなければならないファイル数を最小限にします。 このパラメータの使用は、archivelocationがスタンバイサーバにおいて短期的な保存場所となっている場合には適切ですが、archivelocationを長期的なWALアーカイブ領域として使っている場合、または複数のスタンバイサーバが同一のアーカイブログの場所からリカバリしている場合には適切ではありません。
スタンドアローンプログラムとして使用される場合、oldestkeptwalfileより論理的に前のWALファイルは、すべてarchivelocationから削除されます。 このモードでは、.backupファイルが指定されると、そのプレフィックス部だけがoldestkeptwalfileとして使用されます。 この機能は、エラーを起こすことなく特定のベースバックアップより前のすべてのWALファイルを削除することを可能にします。 以下の例は、000000010000003700000010より古いすべてのファイルを削除する実例です。
pg_archivecleanup -d archive 000000010000003700000010.00000020.backup pg_archivecleanup: keep WAL file "archive/000000010000003700000010" and later pg_archivecleanup: removing file "archive/00000001000000370000000F" pg_archivecleanup: removing file "archive/00000001000000370000000E"
pg_archivecleanupは、archivelocationがサーバを実行しているユーザによって読み書き可能なディレクトリであるものと仮定しています。
pg_archivecleanupは、以下のコマンドライン引数を受け付けます。
stderrに大量のデバッグログを出力します。
削除されるファイルの名前をstdoutに出力します(実際には削除しません).
pg_archivecleanupのバージョンを表示して終了します。
プログラムがスタンドアローンユーティリティとして使用される場合、削除するファイルを決定する前にファイル名から取り除かれる拡張子を指定します。 保存時に圧縮され、そのため圧縮プログラムにより拡張子を付けられたアーカイブを消去するのに特に役に立ちます。 例: -x.gz
プログラムに渡されるファイル名.backupは拡張子を含んではいけないことに注意して下さい。
pg_archivecleanupのコマンドライン引数に関するヘルプを表示して終了します。
pg_archivecleanupは、PostgreSQL 8.0 とそれ以降において、スタンドアローンユーティリティとして動作するように設計されています。 また、PostgreSQL 9.0 とそれ以降においてはアーカイブのクリーンナップコマンドとして動作するように設計されています。
pg_standbyはC言語で書かれており、必要に応じて修正すべき部分が明確に示されているので、修正の容易なソースコードとなっています。
LinuxやUnixのシステムでは、以下のように使います。
archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive %r 2>>cleanup.log'
アーカイブディレクトリは物理的にはスタンバイサーバ上に配置されていますので、archive_commandはNFSを経由してアーカイブディレクトリにアクセスしますが、それらのファイルはスタンバイサーバにとってはローカルファイルです。 この設定では、
デバッグ出力をcleanup.logに生成します。
アーカイブディレクトリの中から、不要になったファイルを削除します。