Como ALTERAR uma tabela do PostgreSQL e tornar uma coluna única?

166

Eu tenho uma tabela no PostgreSQL onde o esquema se parece com isso:

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
)

Agora, quero tornar o link permanente único em toda a tabela, ALTERANDO a tabela. Alguém pode me ajudar com isso?

TIA

Baishampayan Ghose
fonte
2
create unique index on foo_table (permalink)
a_horse_with_no_name

Respostas:

270

Eu descobri isso nos documentos do PostgreSQL, a sintaxe exata é:

ALTER TABLE the_table ADD CONSTRAINT constraint_name UNIQUE (thecolumn);

Obrigado Fred .

Baishampayan Ghose
fonte
231

Ou peça ao banco de dados que atribua automaticamente um nome de restrição usando:

ALTER TABLE foo ADD UNIQUE (thecolumn);
Clint Pachl
fonte
1
Se você fizer isso, o postgres criará a restrição, mas o nome que será atribuído "automaticamente" será a palavra "adicionar". Eu apenas tentei
Santi
Quando eu uso a sintaxe acima, o Postgress cria o novo contraint com o nome mytable_mycolumn_key Estou muito feliz com isso :-)
Adam
41

também é possível criar uma restrição exclusiva de mais de uma coluna:

ALTER TABLE the_table 
    ADD CONSTRAINT constraint_name UNIQUE (column1, column2);
Stefan
fonte
Este não parece trabalho para algo como: ALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE (payload::text, name);ouALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE ((payload::text), name);
writofmandamus