gpt4 book ai didi

postgresql - Postgres动态更新约束外键

转载 作者:行者123 更新时间:2023-11-29 12:00:57 24 4
gpt4 key购买 nike

我有很多带有很多外键的表,而且几乎所有表都是 UPDATE NO ACTION 和 DELETE NO ACTION。

是否可以将所有这些外键动态更新为 CASCADE 而不是 NO ACTION 或 RESTRICT?

例如:

ALTER TABLE * ALTER FOREIGN KEY * SET ON UPDATE CASCADE ON DELETE CASCADE;

您的,迪奥戈

最佳答案

不,这是不可能的。

您将需要删除并重新创建所有约束,因为不能像那样更改外键约束。

以下语句将生成必要的 alter table 语句以删除并重新创建外键:

select 'alter table '||pgn.nspname||'.'||tbl.relname||' drop constraint '||cons.conname||';'
from pg_constraint cons
join pg_class tbl on cons.confrelid = tbl.oid
join pg_namespace pgn on pgn.oid = tbl.relnamespace
where contype = 'f'

union all

select 'alter table '||pgn.nspname||'.'||tbl.relname||' add constraint '||cons.conname||' '||pg_get_constraintdef(cons.oid, true)||' ON UPDATE CASCADE ON DELETE CASCADE;'
from pg_constraint cons
join pg_class tbl on cons.confrelid = tbl.oid
join pg_namespace pgn on pgn.oid = tbl.relnamespace
where contype = 'f'

将此语句的输出保存到一个文件中并运行它。

确保在运行之前验证生成的语句!

关于postgresql - Postgres动态更新约束外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10816116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com