Я реализовал логическую репликацию в PostgreSQL 10 в пределах 2 дБ на 2 разных серверах, и я знаю, что последовательности не синхронизированы, поэтому я создал функцию триггера, подобную этой, в обеих базах данных:
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), мне нужно обновить всепоследовательности для начала написанияон был там, где был раньше.