2015-10-18 36 views
1

我在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

使用事務中的多個語句生效於支持在一個事務中使用此DDL所有的SQL數據庫管理系統。

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,}$');