4

我正在从表中删除这一行,它在 FK 上有一堆级联,最终它给了我这个错误:

错误:在表“foo_route”上插入或更新违反了外键约束“foo_route_bar_fk”

SQL 状态:23503

详细信息:表“bar”中不存在键 (bar_key)=(2176)。

foo_route_bar_fk 定义如下:

ALTER TABLE foo_route  
ADD CONSTRAINT foo_route_bar_fk FOREIGN KEY (bar_key) REFERENCES bar (bar_key) 
MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE;

通过删除与这两个无关的表,我得到了这个错误。我认为正在发生的事情是触发器或级联导致此错误,但很难找出原因。

我的问题是,你如何在 postgresql 中调试这样的问题? 导致此错误的一系列步骤是什么? Postgresql 只告诉我它在失败之前所做的最后一件事的结果。如果这是代码,则错误将提供非常有用的堆栈跟踪。有没有办法在 Postgresql 中看到类似的东西?

4

1 回答 1

2

通常,您的 postgresql 日志将包含触发错误的语句。这应该允许您遵循级联事件的链。

然而,我建议的一件事是,您可能想要绘制 fkeys 的映射并查看外键上的 ON 事件的映射。如果是我,我会从仅模式转储或 pg_autodoc 输出开始,然后从那里开始。明显的问题是,您在不能级联的情况下删除了级联,因此您需要在这里查看并重新考虑。

于 2013-01-27T07:38:10.190 回答