pg_archivecleanup — PostgreSQL WALアーカイブファイルを消去する
pg_archivecleanup
[option
...] archivelocation
oldestkeptwalfile
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
から削除されます。
このモードでは、.partial
または.backup
のファイル名が指定されると、そのプレフィックス部だけがoldestkeptwalfile
として使用されます。
この.backup
のファイル名の処置により、エラーを起こすことなく特定のベースバックアップより前のすべての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は、以下のコマンドライン引数を受け付けます。
-d
stderr
に大量のデバッグログを出力します。
-n
削除されるファイルの名前をstdout
に出力します(実際には削除しません).
-V
--version
pg_archivecleanupのバージョンを表示して終了します。
-x
extension
プログラムがスタンドアローンユーティリティとして使用される場合、削除するファイルを決定する前にファイル名から取り除かれる拡張子を指定します。
保存時に圧縮され、そのため圧縮プログラムにより拡張子を付けられたアーカイブを消去するのに特に役に立ちます。
例: -x.gz
-?
--help
pg_archivecleanupのコマンドライン引数に関するヘルプを表示して終了します。
pg_archivecleanupは、PostgreSQL 8.0 とそれ以降において、スタンドアローンユーティリティとして動作するように設計されています。 また、PostgreSQL 9.0 とそれ以降においてはアーカイブのクリーンナップコマンドとして動作するように設計されています。
pg_archivecleanupはC言語で書かれており、必要に応じて修正すべき部分が明確に示されているので、修正の容易なソースコードとなっています。
LinuxやUnixのシステムでは、以下のように使います。
archive_cleanup_command = 'pg_archivecleanup -d /mnt/standby/archive %r 2>>cleanup.log'
アーカイブディレクトリは物理的にはスタンバイサーバ上に配置されていますので、archive_command
はNFSを経由してアーカイブディレクトリにアクセスしますが、それらのファイルはスタンバイサーバにとってはローカルファイルです。
この設定では、
デバッグ出力をcleanup.log
に生成します。
アーカイブディレクトリの中から、不要になったファイルを削除します。