pg_recvlogical — PostgreSQLのストリームの論理デコードを制御する
pg_recvlogical [option...]
pg_recvlogicalはレプリケーションスロットの論理デコードを制御し、またレプリケーションスロットからデータを流します。
これはレプリケーションモードの接続をするため、pg_receivewalと同じ制約に加えて、論理レプリケーション(第49章を参照)と同じ制約も受けます。
pg_recvlogicalには、論理デコードのSQLインタフェースのpeekとgetのモードに対応するものがありません。
データを受信する度、および終了時にダラダラとその再生確認を送信します。
スロット上の未処理のデータを処理せずに検査するには、pg_logical_slot_peek_changesを使用してください。
動作を選択するため、以下のオプションのうち少なくとも1つを指定しなければなりません。
--create-slot
新しい論理レプリケーションスロットを--slotで指定した名前で、--pluginの出力プラグインを使い、--dbnameで指定したデータベースに対して作成します。
--drop-slot
--slotで指定された名前のレプリケーションスロットを削除して、終了します。
--start
--slotで指定した論理レプリケーションスロットからストリームの変更を開始し、シグナルを受けて終了するまで継続します。
サーバ側の変更ストリームがサーバのシャットダウンまたは接続断によって終了した場合は、--no-loopが指定されていなければ、ループ内でリトライします。
ストリームのフォーマットは、スロットが作成された時に指定された出力プラグインによって決定されます。
接続はスロットの作成時に使用したのと同じデータベースに対してでなければなりません。
--create-slotと--startは同時に指定することができます。
--drop-slotは他の動作と組み合わせることができません。
以下のコマンド行オプションは出力の場所とフォーマット、およびその他のレプリケーションの動作を制御します。
-E lsn--endpos=lsn
--startモードでは、自動的にレプリケーションを停止し、受信が指定のLSNに到達したら正常な終了ステータス0で終了します。
--start以外のモードの時に指定された場合は、エラーが発生します。
LSNがlsnと正確に一致するレコードがある場合、そのレコードは出力されます。
--endposオプションはトランザクションの境界を意識しないため、トランザクションの途中で出力を切り捨てるかもしれません。
部分的に出力されたトランザクションはいずれも処理されず、スロットが次回、読み込まれた時に再び再生されます。
個々のメッセージが切り捨てられることはありません。
-f filename--file=filename
受け取り、デコードしたトランザクションデータをこのファイルに書き込みます。
stdoutに出力するには-を使います。
-F interval_seconds--fsync-interval=interval_seconds
出力ファイルがディスクに安全にフラッシュされることを確実にするため、pg_recvlogicalがfsync()の呼び出しを実行する頻度を指定します。
サーバはクライアントに対して、フラッシュを実行し、またフラッシュ位置をサーバに報告するように、ときどき要求します。 この設定はそれに加えて、フラッシュをより高頻度で実行するものです。
0という間隔を指定すると、fsync()の呼び出しをまったく実行しなくなりますが、それでも状況をサーバに報告はします。
この場合、クラッシュするとデータが失われるかもしれません。
-I lsn--startpos=lsn
--startモードでは、レプリケーションを指定のLSNから開始します。
この効果の詳細については第49章および53.4を参照してください。
その他のモードでは無視されます。
--if-not-exists
--create-slotが指定され、指定された名前のスロットが既に存在している場合に、エラーを発生させません。
-n--no-loopサーバへの接続が失われたとき、ループ内でリトライせず、単に終了します。
-o name[=value]--option=name[=value]
オプションnameと(指定されていれば)オプション値valueを出力プラグインに渡します。
存在するオプションとその効果は、利用する出力プラグインに依存します。
-P plugin--plugin=pluginスロットを作成するとき、指定された論理デコードの出力プラグインを使います。 第49章を参照してください。 このオプションは、スロットが既に存在する時は、何の効果もありません。
-s interval_seconds--status-interval=interval_secondsこのオプションはpg_receivewalの同じ名前のオプションと同じ効果があります。 そちらの説明を参照してください。
-S slot_name--slot=slot_name
--startモードでは、slot_nameという名前の既存の論理レプリケーションスロットを使います。
--create-slotでは、この名前のスロットを作成します。
--drop-slotモードでは、この名前のスロットを削除します。
-v--verbose冗長モードを有効にします。
以下のコマンド行オプションはデータベース接続パラメータを制御します。
-d database--dbname=database接続するデータベースです。 この意味の詳細は動作の説明を参照してください。 libpqの接続文字列とすることもできます。 詳細は34.1.1を参照してください。 デフォルトはユーザ名です。
-h hostname-or-ip--host=hostname-or-ip
サーバが動作しているマシンのホスト名を指定します。
値がスラッシュで始まるときは、Unixドメインソケットのディレクトリとみなされます。
デフォルト値は、環境変数PGHOSTが設定されていればそれが使用され、設定されていなければUnixドメインソケット接続を試みます。
-p port--port=port
サーバが接続を監視しているTCPポート番号またはローカルのUnixドメインソケットのファイル拡張子を指定します。
デフォルトは環境変数PGPORTが設定されていればそれを使用し、そうでなければコンパイル時に設定されたデフォルト値です。
-U user--username=user接続で使用するユーザ名です。 デフォルトは現在のOSのユーザ名です。
-w--no-password
パスワード入力を促しません。
サーバがパスワード認証を必要とし、.pgpassファイルなど他の手段によるパスワードが利用できない場合は、接続試行は失敗します。
このオプションはバッチジョブやスクリプトなど、パスワードを入力するユーザがいない場合に有用でしょう。
-W--passwordpg_recvlogicalがデータベースに接続する前に、強制的にパスワード入力を促します。
サーバがパスワード認証を要求する場合、pg_recvlogicalは自動的にパスワード入力を促しますから、このオプションは本質的ではありません。
しかし、サーバがパスワードを必要とすることを確認するためにpg_recvlogicalが無駄な接続試行を行うことになります。
無駄な接続試行を避けるために-Wを指定するのが有効になる場合もあるでしょう。
この他に、以下のオプションが利用できます。
-V--versionpg_recvlogicalのバージョンを出力して、終了します。
-?--helppg_recvlogicalのコマンド行引数に関するヘルプを表示して、終了します。
このユーティリティは、他のほとんどのPostgreSQLユーティリティと同様、libpqでサポートされる環境変数を使用します。 (34.14を参照してください)。
pg_recvlogicalは、ソースクラスタでグループパーミッションが有効である場合、受け取ったWALファイルのグループパーミッションを維持します。
例については49.1を参照してください。