检测sql约束的链表中的循环

检测sql约束的链表中的循环,sql,postgresql,Sql,Postgresql,我试图在我的数据库中有一个类似的链表(实际上不是,它应该是一个树结构),并有一个防止循环的PostgresSQL检查 我的数据结构由(id、父id、其他东西)格式的记录组成。有没有可能用支票呢 编辑:模式澄清 我的模式如下: CREATE TABLE static_pages ( id SERIAL PRIMARY KEY, parent_id INTEGER REFERENCES static_pages(id), other_things ); 并且包含像 (1,

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

我的数据结构由
(id、父id、其他东西)
格式的记录组成。有没有可能用支票呢

编辑:模式澄清 我的模式如下:

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)

等等。

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

使用递归CTE(
WITH recursive
)查询来检测触发器中的递归,从触发器中触发
NEW
记录开始,然后插入或更新表中的每一行执行过程my\u recursion\u check()

如果您将模式和示例数据添加到您的问题中,然后在这里发表评论,我可能有时间编写一个演示触发器

见:


我在问题中添加了我的模式。