233

我有下表:

 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约束吗?

4

4 回答 4

447

psql的内联帮助:

\h ALTER TABLE

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

ALTER TABLE tablename ADD CONSTRAINT constraintname UNIQUE (columns);
于 2009-07-28T14:30:42.237 回答
46

是的你可以。但是,如果您的表中有非唯一条目,它将失败。这是在您的表上添加唯一约束的方法。如果您使用的是 PostgreSQL 9.x,您可以按照以下说明进行操作。

CREATE UNIQUE INDEX constraint_name ON table_name (columns);
于 2011-09-07T00:19:19.163 回答
14

如果您的表已经具有基于让我们说的现有约束: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);
于 2017-09-13T22:09:07.920 回答
6

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

于 2009-07-28T14:28:58.883 回答