pglogical: REPLICA TRIGGER перед удалением вызывает повреждение базы данных
Я экспериментирую с двунаправленной репликацией с двумя узлами, используя 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;) и воспроизводю ситуацию, когда триггер должен предотвращать вставку (то есть функция будет возвращать Null).. Я получаю:
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
1 ответ
Ошибка сегментации всегда является ошибкой, если она не вызвана проблемами с оборудованием или повреждением данных.
Вы должны сообщить об ошибке в 2ndQuadrant; это их программное обеспечение.
Не забудьте включить репродуктор в отчет об ошибке.