Możliwym rozwiązaniem jest po prostu użycie opcji DROP IF EXISTS przed utworzeniem nowego ograniczenia.
ALTER TABLE foo DROP CONSTRAINT IF EXISTS bar;
ALTER TABLE foo ADD CONSTRAINT bar ...;
Wydaje się prostsze niż próba zapytania o informacje_schemat lub katalogi, ale może być powolne w przypadku dużych tabel, ponieważ zawsze odtwarza ograniczenie.
Edycja 13-07-2015:Kev zwrócił uwagę w swojej odpowiedzi, że moje rozwiązanie tworzy krótkie okno, gdy ograniczenie nie istnieje i nie jest egzekwowane. Chociaż to prawda, możesz dość łatwo uniknąć takiego okna, umieszczając oba wyciągi w transakcji.