我可以添加一个UNIQUE约束到PostgreSQL表后,它's已经创建?

我有以下表格:

 tickername | tickerbbname  | tickertype
------------+---------------+------------
USDZAR     | USDZAR Curncy | C
EURCZK     | EURCZK Curncy | C
EURPLN     | EURPLN Curncy | C
USDBRL     | USDBRL Curncy | C
USDTRY     | USDTRY Curncy | C
EURHUF     | EURHUF Curncy | C
USDRUB     | USDRUB Curncy | C

对于任何给定的tickername/tickerbbname对,我不希望有多于一列。我已经创建了表,其中有很多数据(我已经确保满足唯一的标准)。然而,随着它变得越来越大,出错的空间也越来越大。

此时是否有办法添加UNIQUE约束?

242863 次浏览

是的,您可以在事后添加UNIQUE约束。但是,如果你的表中有非唯一的条目,Postgres会抱怨,直到你改正它们。

psql的内联帮助:

\h ALTER TABLE

postgres文档中也有记录(一个很好的资源,而且也很容易阅读)。

ALTER TABLE tablename ADD CONSTRAINT constraintname UNIQUE (columns);

是的,你可以。但是如果你的表中有非唯一的条目,它就会失败。下面是如何在PostgreSQL 9.x中添加一个唯一的约束:

    CREATE UNIQUE INDEX constraint_name ON table_name (columns);

如果你有一个表,已经有一个现有的约束,让我们说:name和lastname,你想添加一个唯一的约束,你必须放弃整个约束:

ALTER TABLE your_table DROP CONSTRAINT constraint_name;

确保您想要添加的新约束在该表上的所有数据中是唯一的/非空的(如果是Microsoft Sql,它只能包含一个空值),然后您可以重新创建它。

ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... column_n);