postgre检测链表中 sql 约束的周期



我正在尝试在我的数据库中有一个类似链表的(实际上不是,它应该是一个树结构),并有一个防止循环的PostgresSQL CHECK。

我的数据结构由(id, parent_id, other_things)格式的记录组成。可以用检查来做到这一点吗?

编辑:架构说明我的架构如下:

CREATE TABLE static_pages (
    id SERIAL PRIMARY KEY,
    parent_id INTEGER REFERENCES static_pages(id),
    other_things
);

并包含元组,例如

(1, NULL),
(2, NULL),
(3, 1),
(4, 3),
(5, NULL)

等等。

不,不能使用 CHECK 约束来执行此操作,但触发器可用于此目的。

使用递归 CTE (WITH RECURSIVE) 查询来检测触发器中的递归,从触发BEFORE INSERT OR UPDATE ON thetable FOR EACH ROW EXECUTE PROCEDURE my_recursion_check()的触发器中的NEW记录开始。

如果您将架构和示例数据添加到您的问题中,请在此处发表评论,我可能有时间编写演示触发器。

看:

  • 触发程序
  • CREATE TRIGGER
  • WITH (CTE)

最新更新