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


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 .


231

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

ALTER TABLE foo ADD UNIQUE (thecolumn);

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);

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.