PostgreSQL logical replication 的常见配置坑

发布时间 - 2026-01-30 00:00:00    点击率:
wal_level必须设为logical才能启用逻辑复制,否则复制静默失败;还需配置max_wal_senders≥2、max_replication_slots≥1、pg_hba.conf添加replication权限行、用户授予REPLICATION属性及SELECT权限,并确保表结构完全一致。

wal_level 没设成 logical 就启动复制?直接静默失败

逻辑复制不是“开箱即用”的功能,wal_level 必须显式设为 logical,否则即使创建了 publication、subscription,复制也会卡在初始化阶段,不报错、不同步、不提示——只默默停在“waiting for initial copy”或根本收不到任何 INSERT/UPDATE 消息。

常见错误配置:wal_level = replica 或保留默认值 replica(PostgreSQL 12+ 默认),这仅支持物理复制,对逻辑复制无效。

  • wal_level = logical 是硬性前提,改完必须重启 PostgreSQL(热重载不生效)
  • max_wal_senders 至少 ≥ 2:一个用于 base backup,一个用于逻辑复制流;建议设为 5 或更高
  • max_replication_slots 必须 ≥ 1,且要 ≥ 实际创建的 slot 数量(publication 自动占用 slot)

pg_hba.conf 漏掉 replication 权限行,连接被拒却不报“replication”关键词

订阅端连接发布端时,用的是 replication 数据库类型,不是普通 dbname=xxx。如果 pg_hba.conf 只写了普通用户访问规则,连接会直接拒绝,但错误日志里往往只显示 connection rejectedFATAL: no pg_hba.conf entry,根本不会提“replication”三个字,极易误判为网络或密码问题。

  • 必须加这一行(注意第 2 字段是 replication,不是数据库名):
    host replication repl_user 192.168.10.0/24 md5
  • 用户 repl_user 必须有 REPLICATION 属性:ALTER USER repl_user WITH REPLICATION;
  • 若用 pg_create_subscription() 自动建 slot,该用户还需 SUPERUSER 或至少 pg_read_all_data(PG 14+)

订阅端表结构不匹配,复制中途崩在 “duplicate

key violates unique constraint”

逻辑复制不校验表结构一致性,它只按 relation ID 和列序号投递数据。如果从库表少了字段、主键类型不一致、或已有冲突主键值,INSERT/UPDATE 会直接报错并中断复制进程,错误如:ERROR: duplicate key value violates unique constraint "t1_pkey"

  • 发布端 CREATE PUBLICATION 后新增的表,不会自动加入 publication —— 必须显式 ALTER PUBLICATION ... ADD TABLE
  • 订阅端建表时,所有列名、类型、NOT NULL 约束、主键定义必须与发布端严格一致(顺序也要一致)
  • 首次同步前,务必清空订阅端目标表,或确保无主键/唯一键冲突数据(TRUNCATEDELETE 更安全)
  • 若需跳过初始全量同步,可用 create_subscription(..., copy_data := false),但之后必须手动保证数据一致

Go 里用 pglogrepl 连不上?大概率是环境变量或权限没对齐

pglogrepl 示例程序依赖 PGLOGREPL_TEST_CONN_STRING 环境变量传连接串,但它要求这个串**必须包含 replication 权限**,且不能带 dbname= —— 应该指向发布端数据库,但连接类型是 replication。很多开发者填了普通应用连接串,结果 ReplicationConnect() 返回 ERROR: must be superuser or replication role 却没意识到是权限问题。

  • 正确连接串示例:user=repl password=xxx host=localhost port=5432(不含 dbname
  • 用户 repl 必须有 REPLICATION 属性,且对发布数据库有 SELECT 权限(否则 base backup 阶段报 permission denied for table
  • 若用 PG 15+,还需 GRANT ALL ON SCHEMA public TO repl;,否则解析 Relation 消息时可能 panic
  • 跳过 base backup 测试?设 PGLOGREPL_SKIP_BASE_BACKUP=true,但生产环境不建议跳

逻辑复制的坑不在语法多难,而在于它把“一致性责任”从数据库推给了人:wal_level、hba 规则、表结构、用户权限、连接串格式,任意一环断掉,它都不报明确错误,只沉默或报错在下游。最稳妥的做法是——每改一项配置,都用 pg_isready -U repl -d 'replication' -h host 验证连接能力,再查 pg_replication_slots 确认 slot 存在且 active。


# word  # go  # ai  # 环境变量  # sql  # NULL  # for  # select  # Error  # public  # copy  # delete  # table  # postgresql  # 数据库  # 关键词  # 设为  # 主键  # 还需  # 报错  # 跳过  # 不报  # 的是  # 也会  # 首次 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 什么是JavaScript解构赋值_解构赋值有哪些实用技巧  php 三元运算符实例详细介绍  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  如何用AI帮你把自己的生活经历写成一个有趣的故事?  实例解析Array和String方法  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  如何在阿里云ECS服务器部署织梦CMS网站?  Laravel如何创建自定义中间件?(Middleware代码示例)  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  JS去除重复并统计数量的实现方法  如何快速选择适合个人网站的云服务器配置?  Laravel如何使用Service Container和依赖注入?(代码示例)  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  如何用wdcp快速搭建高效网站?  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  5种Android数据存储方式汇总  如何在IIS中新建站点并配置端口与物理路径?  如何在IIS中新建站点并配置端口与IP地址?  如何确保西部建站助手FTP传输的安全性?  Laravel怎么清理缓存_Laravel optimize clear命令详解  Laravel如何发送系统通知?(Notification渠道示例)  北京企业网站设计制作公司,北京铁路集团官方网站?  JavaScript中的标签模板是什么_它如何扩展字符串功能  Laravel如何实现用户注册和登录?(Auth脚手架指南)  在线制作视频的网站有哪些,电脑如何制作视频短片?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  新三国志曹操传主线渭水交兵攻略  Laravel如何使用查询构建器?(Query Builder高级用法)  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  Laravel集合Collection怎么用_Laravel集合常用函数详解  使用spring连接及操作mongodb3.0实例  佛山企业网站制作公司有哪些,沟通100网上服务官网?  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  ,交易猫的商品怎么发布到网站上去?  如何快速建站并高效导出源代码?  如何在IIS7上新建站点并设置安全权限?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  Laravel如何实现模型的全局作用域?(Global Scope示例)  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  详解MySQL数据库的安装与密码配置  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  公司门户网站制作流程,华为官网怎么做?  如何快速使用云服务器搭建个人网站?  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  如何快速搭建高效WAP手机网站?  如何生成腾讯云建站专用兑换码?  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?