使用 C# 删除和恢复 PostGreSql 约束

本文关键字:PostGreSql 约束 恢复 删除 使用 | 更新日期: 2023-09-27 18:33:58

我读到PostGreSql不允许你禁用约束检查。 您必须删除并重新创建它们。

我尝试在还原数据库时使用 C# 暂时删除约束。 然后重新启用约束。 有没有办法获取当前约束并在删除它们之前"保存"它。 有些以后如何恢复它们?

如果需要,我可以将约束保存在 C# 代码中,然后重新构造查询以还原它。 但是我是PostGreSql的新手,所以我不知道如何以以后恢复的方式获取约束列表。

提前谢谢。

使用 C# 删除和恢复 PostGreSql 约束

使用 Postgres 系统目录获取检查约束列表(针对以下示例中public架构中的所有表):

create table example (id int, val int check (val > 100), str text check (str <> ''));
select nspname schema_name, relname table_name, conname con_name, consrc con_source
from pg_constraint t
join pg_class c on t.conrelid = c.oid
join pg_namespace n on c.relnamespace = n.oid
where contype = 'c' and nspname = 'public';
 schema_name | table_name |     con_name      |    con_source     
-------------+------------+-------------------+-------------------
 public      | example    | example_str_check | (str <> ''::text)
 public      | example    | example_val_check | (val > 100)
(2 rows)

有了这个数据集,你可以生成适当的语句来删除和恢复约束:

alter table public.example drop constraint example_str_check;
alter table public.example drop constraint example_val_check;
alter table public.example add constraint example_str_check check ((str <> ''::text));
alter table public.example add constraint example_val_check check ((val > 100));