在PostgreSQL表已经创建之后,我可以为它添加一个UNIQUE约束吗?

时间:2009-07-28 14:22:18

标签: sql database postgresql indexing unique-constraint

我有下表:

 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 个答案:

答案 0 :(得分:306)

psql的内联帮助:

\h ALTER TABLE

还记录在postgres docs中(这是一个很好的资源,也很容易阅读)。

ALTER TABLE tablename ADD CONSTRAINT constraintname UNIQUE (columns);

答案 1 :(得分:31)

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

CREATE UNIQUE INDEX constraint_name ON table_name (columns);

答案 2 :(得分:5)

是的,您可以在事后添加UNIQUE约束。但是,如果您的表中有非唯一条目,Postgres会在您更正之前对其进行投诉。

答案 3 :(得分:3)

如果你的表已经存在一个基于let的名称: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);