¿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


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 .


231

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

ALTER TABLE foo ADD UNIQUE (thecolumn);

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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.