在 Postgresql 中,如何调试删除级联后发生的错误?
·
问题:在 Postgresql 中,如何调试删除级联后发生的错误?
我正在从表中删除这一行,它在 FK 上有一堆级联,最终它给了我这个错误:
错误:在表“foo_route”上插入或更新违反了外键约束“foo_route_bar_fk”
SQL 状态:23503
详细信息:表“bar”中不存在键 (bar_key)u003d(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 中看到类似的东西?
解答
通常,您的 postgresql 日志将包含触发错误的语句。这应该允许您遵循级联事件的链。
然而,我建议的一件事是,您可能想要绘制 fkeys 的映射并查看外键上的 ON 事件的映射。如果是我,我会从仅模式转储或 pg_autodoc 输出开始,然后从那里开始。明显的问题是,您在不能级联的情况下删除了级联,因此您需要在这里查看并重新考虑。
更多推荐
所有评论(0)