2014-03-04 60 views
0

我想有一个链表类(实际上不是,它应该是一个树形结构)在我的数据库,并有PostgreSQL的检查,以防止循环。检测周期为SQL约束

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

编辑:澄清架构 我的架构如下:

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) 

等等的元组。

回答

1

不,你不能用CHECK约束做到这一点,但一个触发器可以用于这一目的。

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

如果您添加架构和示例数据到您的问题然后在这里评论我可能有时间写一个演示触发器。

请参见:

+0

我说我的架构中的问题。 –