检测sql约束的链表中的循环
我试图在我的数据库中有一个类似的链表(实际上不是,它应该是一个树结构),并有一个防止循环的PostgresSQL检查 我的数据结构由检测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,
(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()
如果您将模式和示例数据添加到您的问题中,然后在这里发表评论,我可能有时间编写一个演示触发器
见: