【发布时间】:2019-11-02 10:15:31
【问题描述】:
我已经在 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();
实际上在 DB1 甚至在 DB2 中使用了奇数 ID 的事实的一部分,为什么在第二个数据库中没有触发该函数?
如果我在 DB1 中插入一条记录,我有 ID 3,它会进行复制,并且在 DB2 中我有相同的记录和相同的ID,我将检查 DB2 中的序列并仍然是 1 而不是 3。
现在我要在 DB2 中插入一条记录,我有 ID 2 和 4。
对于我想要实现的是一个主主系统,万一那个坏了我可以写第二个我不太在乎,但是当我要去的时候会考虑以防万一恢复服务器中已关闭的数据库(可能使用 pg-dump 备份)我需要更新所有序列以从之前的位置开始写入。
【问题讨论】:
标签: postgresql replication database-replication multi-master-replication