postgresql - pglogical:删除前的 REPLICA TRIGGER 导致数据库损坏
问题描述
我正在尝试使用 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 上重复错误
解决方案
分段错误始终是错误,除非它是由硬件问题或数据损坏引起的。
您应该向 2ndQuadrant 提交错误;这是他们的软件。
确保在错误报告中包含复制者。
推荐阅读
- python - discord.py - 有没有办法改变服务器的标志?
- json - 如何使用 paypal api 更新“billing_cycles”对象内的“total_cycles”字段
- angular - 操作对象数组
- dart - 如何以编程方式获取飞镖中类的属性数量?
- python - 当python中的召回率和精度为零时,F1分数计算的方法?
- google-sheets - 如果单元格有 text="yes" 那么对于整个列 SUM 中的每个是(每个是 200)
- css - Chrome 将编辑文本标记放在我的汉堡菜单或按钮上
- node.js - 循环在nodejs puppeteer脚本中不起作用
- python - GroupBy 然后是 Mean/Median/Mode 使用 str.contains Criteria
- c++ - 如何摆脱 C++ 中的这些线程错误?