如何更改PostgreSQL表并使列唯一?


165

我在PostgreSQL中有一张表,其架构如下所示:

CREATE TABLE "foo_table" (
    "id" serial NOT NULL PRIMARY KEY,
    "permalink" varchar(200) NOT NULL,
    "text" varchar(512) NOT NULL,
    "timestamp" timestamp with time zone NOT NULL
)

现在,我想通过更改表来使永久链接在整个表中唯一。有人可以帮我吗?

TIA


2
create unique index on foo_table (permalink)
a_horse_with_no_name 2014年

Answers:


269

我从PostgreSQL文档中弄清楚了,确切的语法是:

ALTER TABLE the_table ADD CONSTRAINT constraint_name UNIQUE (thecolumn);

由于弗雷德


231

或者,让数据库使用以下方法自动分配约束名称:

ALTER TABLE foo ADD UNIQUE (thecolumn);

1
如果这样做,postgres将创建约束,但名称将被“自动”分配,即单词“ add”。我刚刚尝试过
桑蒂

当我使用上面的语法时,Postgress用mytable_mycolumn_key 我对此很满意的名称创建新的约束:-)
Adam

41

也可以创建多于1列的唯一约束:

ALTER TABLE the_table 
    ADD CONSTRAINT constraint_name UNIQUE (column1, column2);

这似乎不适用于以下情况: ALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE (payload::text, name);ALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE ((payload::text), name);
writofmandamus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.