スタンバイを手動で構成(standby.signal + primary_conninfo)
PostgreSQLレプリケーションコマンド
# On the standby, with PostgreSQL stopped (PGDATA came from a backup/copy):
touch $PGDATA/standby.signal
cat >> $PGDATA/postgresql.auto.conf <<'EOF'
primary_conninfo = 'host=<primary_host> port=5432 user=replicator application_name=<standby_name>'
primary_slot_name = '<slot>'
EOF
pg_ctl -D $PGDATA start
# PG13+: change the connection on a running standby without restart (e.g. point it to a new primary):
psql -X -c "ALTER SYSTEM SET primary_conninfo = 'host=<new_primary_host> port=5432 user=replicator application_name=<standby_name>'" -c "SELECT pg_reload_conf();"概要
standby.signalファイルによりサーバーはスタンバイとして起動する。primary_conninfoはストリーミング接続を、primary_slot_nameは使用するレプリケーションスロットを定義する。PG13以降では、primary_conninfoとprimary_slot_nameはリロードで変更できる。
使用する場面
pg_basebackup -Rを使わずに準備したデータディレクトリ(pgBackRest、スナップショット、rsync)をスタンバイにする、または既存のスタンバイを新しいプライマリに向けるため。
注意
スロットは事前にプライマリで作成しておく必要がある(pg_create_physical_replication_slot)。そうでないとwalreceiverが失敗し続ける。パスワードはconninfoではなく~/.pgpassに置く。application_nameはsynchronous_standby_names内の名前と完全に一致する必要がある。standby.signalを忘れると、サーバーはプライマリとして起動し、別のタイムラインに移る。