问题描述
我正在为Postgresql中的帖子存储评论表,并且试图在表约束内强制执行更新和结构层次结构。
我要对主键实施更改,但是我不确定如何将更改级联到另一个唯一的字段。
请注意,我希望能够在约束中使用表本身。它既是引用者又是引用者。对于ON CASCADE DELETE
,这非常方便。
我有下表:
create table test_boolean_cascade (
id serial primary key,parent_id integer,is_active boolean not null default true,is_parent_active boolean,unique (id,is_active),foreign key (parent_id) references test_boolean_cascade(id) on delete cascade,foreign key (id,is_active) references test_boolean_cascade (id,is_active) on update cascade
)
;
我用以下示例数据填充了它:
insert into test_boolean_cascade (parent_id,is_active,is_parent_active)
values
(null,true,null),(null,(1,(2,(3,(4,null)
;
不幸的是,以下sql语句仅更新is_active
列。它还不会触发对子is_parent_active
列的更新:
update test_boolean_cascade
set is_active = false
where id = 1
;
以下是所需结构的示例,它是由https://ozh.github.io/ascii-tables/
生成的+----+-----------+-----------+------------------+
| id | parent_id | is_active | is_parent_active |
+----+-----------+-----------+------------------+
| 1 | NULL | true | NULL |
| 2 | 1 | false | true |
| 3 | 2 | false | false |
+----+-----------+-----------+------------------+
在上面的示例中,最好具有以下内容:
- 根据
id
级联删除记录 - 根据根父级对
is_parent_active
的更新,在is_active
上级联值更新
如果删除了父记录(由id
表示),我可以删除从属记录。
我看不到如何强制所有子记录进行更新。如果父母的is_active
字段更改为false,我希望将false
字段强制设置为is_active
。
也可以,这种级联只能以一种方式工作吗?我的意思是,是否有可能强制所有子记录(如果仅在新值为false
时进行更新)?这样做的原因是一次操作将禁用所有子级注释,但是如果重新启用注释只会影响1条记录,那就太好了。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)