¿Cómo ALTERO una tabla PostgreSQL y hago que una columna sea única?

166

Tengo una tabla en PostgreSQL donde el esquema se ve así:

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
)

Ahora quiero hacer que el enlace permanente sea único en la tabla ALTERANDO la tabla. ¿Puede alguien ayudarme con esto?

TIA

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

Respuestas:

270

Lo descubrí a partir de los documentos de PostgreSQL, la sintaxis exacta es:

ALTER TABLE the_table ADD CONSTRAINT constraint_name UNIQUE (thecolumn);

Gracias Fred .

Baishampayan Ghose
fuente
231

O haga que el DB asigne automáticamente un nombre de restricción usando:

ALTER TABLE foo ADD UNIQUE (thecolumn);
Clint Pachl
fuente
1
Si hace esto, postgres creará la restricción pero el nombre se asignará "automáticamente" y es la palabra "agregar". Lo acabo de probar
Santi
Cuando uso la sintaxis anterior, Postgress crea la nueva restricción con el nombre mytable_mycolumn_key Estoy muy contento con eso :-)
Adam
41

También es posible crear una restricción única de más de 1 columna:

ALTER TABLE the_table 
    ADD CONSTRAINT constraint_name UNIQUE (column1, column2);
Stefan
fuente
Esto no parece funcionar para algo como: ALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE (payload::text, name);oALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE ((payload::text), name);
writofmandamus