PostgreSQL 15跨机器逻辑复制失效,需排查额外配置项
PostgreSQL 15逻辑复制故障排查:未覆盖的配置与检查项
发布端(Machine 1)需确认项
- 检查
max_replication_slots:逻辑复制需要预留复制槽,执行SHOW max_replication_slots;确认值≥发布数量,不足则在postgresql.conf中调整后重启实例。 - 验证
max_wal_senders:该参数控制WAL发送进程数,需≥订阅数量+预留值,通过SHOW max_wal_senders;查看,修改后重启生效。 - 权限验证:创建发布的用户需拥有
REPLICATION权限或为超级用户;发布涉及的表需对该用户开放SELECT权限。 - 调整
wal_sender_timeout:若网络不稳定,适当调大该参数避免连接被过早断开,修改后重启。 - 配置
pg_hba.conf:添加允许订阅端(Machine 2)IP的访问规则,示例:
修改后执行host replication 订阅用户名 Machine2_IP/32 scram-sha-256pg_ctl reload加载配置。
订阅端(Machine 2)需确认项
- 调整逻辑复制工作进程参数:在
postgresql.conf中设置:
确保有足够进程处理复制任务,修改后重启实例。max_logical_replication_workers = 4 max_sync_workers_per_subscription = 2 - 订阅用户权限:订阅端用户需在发布端拥有
REPLICATION权限,且能访问发布的表;同时订阅端用户需具备表创建(初始化同步时)或修改权限。 - 核对订阅连接参数:pgAdmin中创建订阅时的连接字符串需包含正确的发布端主机、端口、数据库名、用户名及密码,无拼写或配置错误。
- 检查订阅状态:执行以下SQL查看订阅是否正常:
确认状态为SELECT subname, substate FROM pg_subscription; SELECT relname, srsubstate FROM pg_subscription_rel;ready,无报错信息。
通用与网络检查
- 网络连通性:验证两台机器可正常访问PostgreSQL默认端口(5432),可通过
nc -zv Machine1_IP 5432测试。 - 表结构要求:发布的表必须有主键,或通过
ALTER TABLE 表名 REPLICA IDENTITY USING INDEX 唯一索引名;指定副本标识,否则无法进行行级逻辑复制。 - 日志排查:查看发布端与订阅端的PostgreSQL日志(通常在
pg_log目录),日志中会包含具体错误信息(如权限不足、表结构不匹配、连接失败等),是定位问题的核心依据。
内容的提问来源于stack exchange,提问作者Hamza Assemlal
相关产品推荐
相关产品推荐

