pg_receivexlog — PostgreSQLサーバからトランザクションログをストリームする
pg_receivexlog
[option
...]
pg_receivexlogは実行中のPostgreSQLクラスタからトランザクションログをストリームするために使用されます。 トランザクションログはストリーミングレプリケーションプロトコルを使用してストリームされ、ローカルディレクトリのファイルとして書き出されます。 このディレクトリはポイントインタイムリカバリ(25.3. 継続的アーカイブとポイントインタイムリカバリ(PITR)参照)を用いてリストアする際のアーカイブ場所として使用することができます。
pg_receivexlogはトランザクションログをサーバで生成に合わせてリアルタイムでストリームし、archive_commandのようにセグメントが完了するまで待機することはありません。 このため、pg_receivexlogを使用する場合にはarchive_timeoutを設定する必要はありません。
PostgreSQLのスタンバイサーバのWALレシーバと異なり、pg_receivexlogはデフォルトでは、WALファイルがクローズされた時にのみ、WALデータをフラッシュします。
WALデータをリアルタイムでフラッシュするには--synchronous
オプションを指定する必要があります。
トランザクションログは通常のPostgreSQL接続を経由して、そしてレプリケーションプロトコルを使用して、ストリームされます。
この接続はスーパーユーザまたはREPLICATION
権限(21.2. ロールの属性参照)を持つユーザで確立されなければなりません。
そしてpg_hba.conf
でレプリケーション用の接続を許可しなければなりません。
またサーバではストリーム用に利用できるセッションが少なくとも1つ存在できるためにmax_wal_sendersを十分大きく設定しなければなりません。
接続が失われた場合、または、致命的ではないエラーで初期確立ができなかった場合、pg_receivexlogは無期限に接続を再試行しできるだけ早くストリーミングを再確立します。
この動作を止めるためには-n
パラメータを使用してください。
-D directory
--directory=directory
出力を書き出すディレクトリです。
このパラメータは必須です。
--if-not-exists
--create-slot
が指定され、指定された名前のスロットが既に存在していた場合に、エラーを発生させません。
-n
--no-loop
接続エラー時に繰り返しません。 代わりにエラーですぐに終了します。
-s interval
--status-interval=interval
サーバに状態パケットを返答する間隔を秒単位で指定します。 これによりサーバからより簡単に進行状況を監視することができます。 ゼロという値は状態の定期的な更新を完全に無効にします。 しかしタイムアウトによる切断を防ぐために、サーバから要求された時には更新を送信します。 デフォルト値は10秒です。
-S slotname
--slot=slotname
pg_receivexlogが既存のレプリケーションスロットを使うようにします(26.2.6. レプリケーションスロットを参照してください)。 このオプションが使われると、pg_receivexlogはフラッシュ位置をサーバに報告します。 これは、各セグメントがいつディスクに同期されたかを示し、それによりサーバが必要のなくなったセグメントを削除できるようになります。
pg_receivexlogのレプリケーションクライアントが同期スタンバイとしてサーバ上で構成されている場合、レプリケーションスロットを利用するとフラッシュ位置がサーバに報告されますが、それはWALファイルがクローズされる時のみです。
したがって、その構成ではプライマリ上のトランザクションが長時間待たされることになり、結果的に満足する動作を得られません。
これを正しく動作させるには、追加で--synchronous
オプション(以下を参照)を指定する必要があります。
--synchronous
WALデータを受け取ると即座にディスクにフラッシュします。
またフラッシュした直後に、--status-interval
の値が何であれ、ステータスパケットをサーバに送り返します。
pg_receivexlogのレプリケーションクライアントが同期スタンバイとしてサーバ上で構成されている場合、フィードバックが遅延なくサーバに送り返されることを確実にするため、このオプションを指定すべきです。
-v
--verbose
冗長モードを有効にします。
以下のコマンドラインオプションはデータベース接続パラメータを制御します。
-d connstr
--dbname=connstr
サーバに接続するために使用するパラメータを、接続文字列として指定します。 詳細については32.1.1. 接続文字列を参照してください。
このオプションは他のクライアントアプリケーションとの整合性のために--dbname
と呼ばれます。
しかし、pg_receivexlogはクラスタ内のどの特定のデータベースにも接続しませんので、接続文字列内のデータベース名は無視されます。
-h host
--host=host
サーバが稼働しているマシンのホスト名を指定します。
名前がスラッシュから始まる場合、Unixドメインソケット用のディレクトリとして使用されます。
デフォルトは環境変数PGHOST
が設定されていればその値から取られ、設定されていない場合はUnixドメインソケット接続が試行されます。
-p port
--port=port
サーバが接続を待ち受けるTCPポートまたはUnixドメインソケットファイルの拡張子を指定します
デフォルトは環境変数PGPORT
が指定されていればその値から取られ、設定されていない場合はコンパイル時のデフォルト値から取られます。
-U username
--username=username
接続するユーザ名です。
-w
--no-password
パスワード入力を促しません。
サーバがパスワード認証を必要とし、かつ、.pgpass
ファイルなど他の手段でパスワードが入手できない場合、接続試行は失敗します。
このオプションは、パスワードを入力するユーザが存在しないバッチジョブやスクリプトで有用になります。
-W
--password
pg_receivexlogはデータベースに接続する前にパスワード入力を強制的に促します。
このオプションは重要ではありません。
pg_receivexlogは、サーバがパスワード認証を要求した場合に自動的にパスワードを促すためです。
しかしpg_receivexlogは、サーバがパスワードを要求するかどうかを確認するために接続試行を浪費します。
-W
と入力して無駄な接続試行を防止することが有意である場合があります。
pg_receivexlogは物理的なレプリケーションスロットを制御するため、以下の2つの動作のうちの1つを実行できます。
--create-slot
--slot
で指定された名前の新しい物理的なレプリケーションスロットを作成して終了します。
--drop-slot
--slot
で指定された名前の物理的なレプリケーションスロットを削除して終了します。
この他に以下のオプションも使用することができます。
-V
--version
pg_receivexlogのバージョンを表示し、終了します。
-?
--help
pg_receivexlogコマンドライン引数についてのヘルプを表示し、終了します。
他のほとんどのPostgreSQLユーティリティと同様、このユーティリティはlibpqでサポートされる環境変数(32.14. 環境変数参照)を使用します。
archive_commandの代わりにpg_receivexlogをWALのバックアップのメインの方法として使用する場合、レプリケーションスロットを使用することを強く推奨します。 そうしなければ、サーバはarchive_commandとレプリケーションスロットのいずれからもWALのストリームがどこまでアーカイブされているかの情報を得られないため、トランザクションログファイルがバックアップされる前にそれを再利用または削除するかもしれないのです。 しかし、WALデータを受け取る側がそのフェッチに追いつけない場合、レプリケーションスロットがサーバのディスクスペースを一杯にしてしまうかもしれないことに注意してください。
トランザクションログをmydbserver
にあるサーバからストリームし、それをローカルディレクトリ/usr/local/pgsql/archive
に格納します。
$
pg_receivexlog -h mydbserver -D /usr/local/pgsql/archive