PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Postgres :ajouter une contrainte si elle n'existe pas déjà

Une solution possible consiste simplement à utiliser DROP IF EXISTS avant de créer la nouvelle contrainte.

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

Cela semble plus facile que d'essayer d'interroger information_schema ou des catalogues, mais peut être lent sur des tables volumineuses car il recrée toujours la contrainte.

Edit 2015-07-13:Kev a souligné dans sa réponse que ma solution crée une courte fenêtre lorsque la contrainte n'existe pas et n'est pas appliquée. Bien que cela soit vrai, vous pouvez éviter une telle fenêtre assez facilement en enveloppant les deux déclarations dans une transaction.