我已经在 PostgreSQL 10 中的 2 个不同服务器中的 2 db 内实现了逻辑复制,并且我知道序列不同步,因此我在两个数据库中都创建了这样的触发器函数:
CREATE FUNCTION update_ogc_fid()
RETURNS trigger
LANGUAGE 'plpgsql'
COST 100
VOLATILE NOT LEAKPROOF
AS $BODY$
Declare
iInt integer;
BEGIN
execute 'Select nextval('|| chr(39) || 'address_ogc_fid_seq' || chr(39) ||');' into iInt;
NEW.ogc_fid = iInt;
RETURN NEW;
END;
$BODY$;
CREATE TRIGGER update_ogc_fid_address
BEFORE INSERT
ON address
FOR EACH ROW
EXECUTE PROCEDURE update_ogc_fid();
ID
实际上在 DB1 甚至在 DB2 中使用奇数的事实的一部分,为什么在第二个数据库中没有触发该函数?
如果我在 DB1 中插入一条记录,我有ID
3 个,它会进行复制,并且在 DB2 中我有相同的记录ID
,我将检查 DB2 中的序列,它仍然是 1 而不是 3。
现在我要在 DB2 中插入一条记录,我有ID
2 条,然后是 4 条。
对于我想要实现的是一个主主系统,以防万一它出现故障,我可以在第二个中写我不太在意,但在我要恢复数据库时考虑以防万一发生灾难在已关闭的服务器中(可能带有 pg-dump 备份)我需要更新所有序列以从以前的位置开始写入。