【问题标题】:pglogical: REPLICA TRIGGER before delete causes database corruptionpglogical:删除前的 REPLICA TRIGGER 导致数据库损坏
【发布时间】:2019-04-04 11:01:08
【问题描述】:

我正在尝试使用 pglogical-9.6 进行 2 节点双向复制。当我设置 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 上重复错误

【问题讨论】:

    标签: postgresql triggers replication terminate pglogical


    【解决方案1】:

    分段错误始终是错误,除非它是由硬件问题或数据损坏引起的。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-15
      • 2020-10-11
      • 1970-01-01
      • 2010-11-20
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多