PostgreSQL更新报错:目标表无副本标识且发布更新,临时表已设主键仍异常
问题分析与解决
错误原因
你遇到的报错是针对被更新的目标表book_max(注意你SQL里写的是update book,大概率是笔误),和临时表bookTemp有没有主键完全无关。
这个错误触发的核心原因是:目标表book_max被配置为逻辑复制的发布表,PostgreSQL要求这类表必须设置REPLICA IDENTITY——用来在复制过程中唯一识别被更新/删除的行,否则复制进程无法定位变更的具体行。
解决方法
给目标表book_max设置REPLICA IDENTITY,根据你的表结构选择以下方式之一:
如果目标表已有主键(推荐):
ALTER TABLE book_max REPLICA IDENTITY PRIMARY KEY;或者直接指定主键索引(若你知道索引名称):
ALTER TABLE book_max REPLICA IDENTITY USING INDEX book_max_pkey;如果目标表没有主键,但存在唯一索引:
ALTER TABLE book_max REPLICA IDENTITY USING INDEX your_unique_index_name;将
your_unique_index_name替换为你实际的唯一索引名称。如果既无主键也无唯一索引(不推荐,性能较差):
ALTER TABLE book_max REPLICA IDENTITY FULL;这种方式会用表的所有列来识别行,复制时会传输更多数据,对性能有影响。
补充说明
临时表bookTemp的主键仅用于约束自身数据的唯一性,和目标表的复制配置没有任何关系。报错的核心是目标表book_max缺少逻辑复制所需的身份识别配置,和临时表的设置无关。
内容的提问来源于stack exchange,提问作者AppleBud
相关产品推荐
相关产品推荐

