pg_receivexlogは実行中のPostgreSQLクラスタからトランザクションログをストリームするために使用されます。 トランザクションログはストリーミングレプリケーションプロトコルを使用してストリームされ、ローカルディレクトリのファイルとして書き出されます。 このディレクトリはポイントインタイムリカバリ(項24.3参照)を用いてリストアする際のアーカイブ場所として使用することができます。
pg_receivexlogはトランザクションログをサーバで生成された時と同じ時刻にストリームし、archive_commandのようにセグメントが完了するまで待機することはありません。 このため、pg_receivexlogを使用する場合にはarchive_timeoutを設定する必要はありません。
トランザクションログは通常のPostgreSQL接続を経由して、そしてレプリケーションプロトコルを使用して、ストリームされます。 この接続はスーパーユーザまたはREPLICATION権限(項20.2参照)を持つユーザで確立されなければなりません。 そしてpg_hba.confで明示的にレプリケーション用の接続を許可しなければなりません。 またサーバではストリーム用に利用できるセッションが少なくとも1つ存在できるためにmax_wal_sendersを十分大きく設定しなければなりません。
接続が失われた場合、または、致命的ではないエラーで初期確立ができなかった場合、pg_receivexlogは無期限に接続を再試行しできるだけ早くストリーミングを再確立します。 この動作を止めるためには-nパラメータを使用してください。
以下のコマンドラインオプションにより格納場所や出力書式を制御します。
出力を書き出すディレクトリです。
このパラメータは必須です。
以下のコマンドラインオプションはプログラムの実行を制御します。
接続エラー時に繰り返しません。 代わりにエラーですぐに終了します。
冗長モードを有効にします。
以下のコマンドラインオプションはデータベース接続パラメータを制御します。
サーバが稼働しているマシンのホスト名を指定します。 名前がスラッシュから始まる場合、Unixドメインソケット用のディレクトリとして使用されます。 デフォルトはPGHOST環境変数が設定されていればその値から取られ、設定されていない場合はUnixドメインソケット接続が試行されます。
サーバが接続を待ち受けるTCPポートまたはUnixドメインソケットファイルの拡張子を指定します デフォルトはPGPORT環境変数が指定されていればその値から取られ、設定されていない場合はコンパイル時のデフォルト値から取られます。
サーバに状態パケットを返答する期間を秒単位で指定します。 これは、リプリケーションタイムアウトがサーバで設定されている場合は必須であり、より簡単に監視することができます。 ゼロという値は状態の更新を完全に無効にします。 デフォルト値は10秒です。
接続するユーザ名です。
パスワード入力を促しません。 サーバがパスワード認証を必要とし、かつ、.pgpassファイルなど他の手段でパスワードが入手できない場合、接続試行は失敗します。 このオプションは、パスワードを入力するユーザが存在しないバッチジョブやスクリプトで有用になります。
pg_receivexlogはデータベースに接続する前にパスワード入力を強制的に促します。
このオプションは重要ではありません。 pg_receivexlogは、サーバがパスワード認証を要求した場合に自動的にパスワードを促すためです。 しかしpg_receivexlogは、サーバがパスワードを要求するかどうかを確認するために接続試行を浪費します。 -Wと入力して無駄な接続試行を防止することが有意である場合があります。
以下のこの他のオプションも使用することができます。
pg_receivexlogのバージョンを表示し、終了します。
pg_receivexlogコマンドライン引数についてのヘルプを表示し、終了します。
archive_commandの代わりにpg_receivexlogを使用する場合、 サーバは、バックアップが適切に保管されていない場合であっても、失敗するコマンドが存在しないため、トランザクションログの再回収を継続します。 これは、ファイルがまだ適切に保管できない場合に失敗するarchive_commandを持たせることで回避することができます。 以下に例を示します。
archive_command = 'sleep 5 && test -f /mnt/server/archivedir/%f'
始めの待ち時間は、pg_receivexlogが非同期レプリケーションを使用して動作し、そのためマスタからわずかに遅れる可能性があるため、必要です。