手动配置备库(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 可通过 reload 修改。
适用场景
用于将未使用 pg_basebackup -R 准备的数据目录(pgBackRest、快照、rsync)变为备库,或将现有备库指向新主库。
注意
复制槽必须事先在主库上创建(pg_create_physical_replication_slot),否则 walreceiver 会持续失败。请将密码放在 ~/.pgpass 中而不是 conninfo 中。application_name 必须与 synchronous_standby_names 中的名称完全一致。如果忘记 standby.signal,服务器会以主库身份启动并转到单独的 timeline。