¿Puedo agregar una restricción ÚNICA a una tabla PostgreSQL, una vez creada?

Resuelto Thomas Browne asked hace 15 años • 4 respuestas

Tengo la siguiente tabla:

 tickername | tickerbbname  | tickertype
------------+---------------+------------
 USDZAR     | USDZAR Curncy | C
 EURCZK     | EURCZK Curncy | C
 EURPLN     | EURPLN Curncy | C
 USDBRL     | USDBRL Curncy | C
 USDTRY     | USDTRY Curncy | C
 EURHUF     | EURHUF Curncy | C
 USDRUB     | USDRUB Curncy | C

No quiero que nunca haya más de una columna para un par tickernamedeterminado tickerbbname. Ya creé la tabla y tengo muchos datos en ella (que ya me aseguré de que cumplan con los criterios únicos). Sin embargo, a medida que se hace más grande, aumenta el margen de error.

¿ Hay alguna forma de agregar una UNIQUErestricción en este punto?

Thomas Browne avatar Jul 28 '09 21:07 Thomas Browne
Aceptado

psqlAyuda en línea de:

\h ALTER TABLE

También documentado en los documentos de Postgres (un recurso excelente, además de fácil de leer).

ALTER TABLE tablename ADD CONSTRAINT constraintname UNIQUE (columns);
hhaamu avatar Jul 28 '2009 14:07 hhaamu

Sí tu puedes. Pero si tiene entradas no únicas en su tabla, fallará. Aquí se explica cómo agregar una restricción única a su tabla en PostgreSQL 9.x:

    CREATE UNIQUE INDEX constraint_name ON table_name (columns);
Zeck avatar Sep 07 '2011 00:09 Zeck

Si tenía una tabla que ya tenía restricciones existentes basadas en, digamos: nombre y apellido y deseaba agregar una restricción única más, tenía que eliminar toda la restricción de la siguiente manera:

ALTER TABLE your_table DROP CONSTRAINT constraint_name;

Asegúrese de que la nueva restricción que desea agregar sea única/no nula (si es Microsoft Sql, solo puede contener un valor nulo) en todos los datos de esa tabla, y luego podrá volver a crearla.

ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... column_n);
Lucas Campos avatar Sep 13 '2017 22:09 Lucas Campos

Sí, puede agregar una restricción ÚNICA después del hecho. Sin embargo, si tiene entradas no únicas en su tabla, Postgres se quejará hasta que las corrija.

Jordan S. Jones avatar Jul 28 '2009 14:07 Jordan S. Jones