pglogical: REPLICA TRIGGER перед удалением вызывает повреждение базы данных - PullRequest
0 голосов
/ 04 апреля 2019

Я экспериментирую с двунаправленной репликацией с двумя узлами, используя 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

1 Ответ

0 голосов
/ 04 апреля 2019

Ошибка сегментации всегда является ошибкой, если она не вызвана проблемами с оборудованием или повреждением данных.

Вы должны сообщить об ошибке в 2ndQuadrant; это их программное обеспечение.

Не забудьте включить репродуктор в отчет об ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...