使用 C# 删除和恢复 PostGreSql 约束
Dropping and Restoring PostGreSql constraints using C#
我读到 PostGreSql 不允许您禁用约束检查。您必须删除并重新创建它们。
我正在尝试使用 C# 暂时删除约束,同时恢复数据库。然后重新启用约束。 有没有办法在删除它们之前获取当前约束并 "save" 它。以及稍后如何恢复它们?
如果需要,我可以在 C# 代码中保存约束,然后重建查询以恢复它。但是我是 PostGreSql 的新手,所以我不知道如何以我以后可以用来恢复的方式获取约束列表。
在此先致谢。
使用 Postgres system catalogs 获取检查约束列表(对于以下示例中 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));
我读到 PostGreSql 不允许您禁用约束检查。您必须删除并重新创建它们。
我正在尝试使用 C# 暂时删除约束,同时恢复数据库。然后重新启用约束。 有没有办法在删除它们之前获取当前约束并 "save" 它。以及稍后如何恢复它们?
如果需要,我可以在 C# 代码中保存约束,然后重建查询以恢复它。但是我是 PostGreSql 的新手,所以我不知道如何以我以后可以用来恢复的方式获取约束列表。
在此先致谢。
使用 Postgres system catalogs 获取检查约束列表(对于以下示例中 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));