pglogical:删除之前的REPLICA TRIGGER导致数据库损坏

问题描述 投票:0回答:1

我正在尝试使用pglogical-9.6进行双节点双向复制。当我设置pglogical.conflict_resolution ='last_update_wins'时,我能够始终导致seg错误。

我正在创建一个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上重复出错

postgresql triggers replication terminate pglogical
1个回答
0
投票

除非由硬件问题或数据损坏引起,否则分段故障始终是一个错误。

您应该向2ndQuadrant提交错误;这是他们的软件。

确保将重现器包含在错误报告中。

© www.soinside.com 2019 - 2024. All rights reserved.