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.