我正在尝试在我的数据库中有一个类似链表的(实际上不是,它应该是一个树结构),并有一个防止循环的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)