¿Puedo agregar una restricción ÚNICA a una tabla PostgreSQL, una vez creada?
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 tickername
determinado 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 UNIQUE
restricción en este punto?
psql
Ayuda 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);
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);
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);
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.