2009-07-28 358 views
97

我有如下表:在创建PostgreSQL表后,我可以添加一个UNIQUE约束吗?

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

+0

可能重复[我怎样改变PostgreSQL表,使一列独特之处?(http://stackoverflow.com/questions/469471/how-do-i-alter-a-postgresql-table -and-MAKE-A柱唯一的) – 2015-07-04 10:23:30

回答

205

psql的在线帮助:

\h ALTER TABLE 

postgres docs也记录(一个很好的资源,再加上易于阅读,太)。

ALTER TABLE tablename ADD CONSTRAINT constraintname UNIQUE (columns); 
+1

感谢@hhaamu。是的,虽然尝试了文档,但你的上面更简洁。 – 2009-07-28 20:17:12

+54

如果你想要让PostgreSQL的生成索引的名字,使用'ALTER TABLE表名ADD UNIQUE(列);`。 (请注意,`CONSTRAINT`关键字必须省略。) – jpmc26 2014-11-26 01:41:10

2

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

+3

`由具有计数1(*)> 1从

组选择;`将给出关于重复值的报告。 – Jasen 2016-08-26 22:57:48

25

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

CREATE UNIQUE INDEX constraint_name ON table_name (columns); 
0

如果你有这样的已经有根据现有约束的表让说:名和姓,你想添加一个唯一约束,你必须通过放弃整个约束:

ALTER TABLE your_table DROP CONSTRAINT constraint_name; 

确保THA你想添加新的约束是唯一/ NOT NULL该表(如果它的Microsoft SQL,它只能包含一个空值)对所有的数据,然后你可以重新创建它。

ALTER TABLE table_name 
ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... column_n); 
相关问题