PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Postgres:aggiungi un vincolo se non esiste già

Una possibile soluzione è semplicemente utilizzare DROP IF EXISTS prima di creare il nuovo vincolo.

ALTER TABLE foo DROP CONSTRAINT IF EXISTS bar;
ALTER TABLE foo ADD CONSTRAINT bar ...;

Sembra più facile che cercare di eseguire query schema_informazioni o cataloghi, ma potrebbe essere lento su tabelle enormi poiché ricrea sempre il vincolo.

Modifica 13-07-2015:Kev ha sottolineato nella sua risposta che la mia soluzione crea una breve finestra quando il vincolo non esiste e non viene applicato. Anche se questo è vero, puoi evitare tale finestra abbastanza facilmente racchiudendo entrambe le istruzioni in una transazione.