如何在PostgreSQL中更改约束定义?

时间:2015-10-18 11:16:45

标签: postgresql

我在PostgreSQL中创建了一个像这样的表:

CREATE TABLE Table1 (
  Id varchar(100) PRIMARY KEY CHECK (Id ~ '^[a-z0-9]{3,15}$'),
  ...
);

这将自动创建一个名为table1_id_check的约束。

现在我想将检查约束更改为

(Id ~ '^[a-z0-9]{3,}$')

如何在PostgreSQL中作为单个语句执行此操作而不删除约束并重新创建它?

1 个答案:

答案 0 :(得分:1)

在事务中使用多个语句适用于支持在事务中使用此DDL的所有SQL dbms。

begin transaction;
    alter table table1
    drop constraint table1_id_check;

    alter table table1 
    add constraint table1_id_check CHECK (Id ~ '^[a-z0-9]{3,}$');
commit;

PostgreSQL允许您在ALTER TABLE语句中使用多个子句。

alter table table1
drop constraint table1_id_check,
add constraint table1_id_check CHECK (Id ~ '^[a-z0-9]{3,}$');