【问题标题】:Dropping and Restoring PostGreSql constraints using C#使用 C# 删除和恢复 PostGreSql 约束
【发布时间】:2016-02-10 13:57:52
【问题描述】:

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

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

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

提前致谢。

【问题讨论】:

    标签: c# postgresql constraints


    【解决方案1】:

    使用 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));
    

    【讨论】:

    • 感谢您的洞察力。这很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    相关资源
    最近更新 更多