Я экспериментирую с двунаправленной репликацией с двумя узлами, используя pglogical-9.6.Я могу постоянно вызывать ошибку сегмента, когда я устанавливаю pglogical.conflict_resolution = 'last_update_wins'.
Я создаю BEFORE DELETE TRIGGER, чтобы предотвратить вставку некоторых значений в реплицируемую таблицу.
CREATE TRIGGER TR_REP BEFORE DELETE
ON table_for_repl
FOR EACH ROW
EXECUTE PROCEDURE check_value();
CREATE OR REPLACE FUNCTION public.check_value()
RETURNS trigger AS
$BODY$
BEGIN
IF OLD."origin"::text = 'test' then
RETURN OLD;
ELSE
RETURN Null;
END IF;
END;
$BODY$
LANGUAGE plpgsq;
Этот триггер работает нормально для обычной операции удаления.Когда я включаю его для репликации (ALTER TABLE table_for_repl ENABLE REPLICA TRIGGER TR_REP;) и воспроизводю ситуацию, когда триггер должен предотвращать вставку (то есть функция будет возвращать ноль) .. Я получаю:
background worker "pglogical apply 16384:1892658794" (PID 4250) was terminated by signal 11: Segmentation fault.
terminating any other active server processes
recovered replication state of node 1 to 0/1764C38
database system was not properly shut down; automatic recovery in progress
Ошибка повторяется на pglogical-11