Možným řešením je jednoduše použít DROP IF EXISTS před vytvořením nového omezení.
ALTER TABLE foo DROP CONSTRAINT IF EXISTS bar;
ALTER TABLE foo ADD CONSTRAINT bar ...;
Zdá se to snazší než zkoušet dotaz information_schema nebo Catalogs, ale na velkých tabulkách to může být pomalé, protože to vždy znovu vytvoří omezení.
Upravit 2015-07-13:Kev ve své odpovědi poukázal na to, že moje řešení vytváří krátké okno, když omezení neexistuje a není vynucováno. I když je to pravda, takovému oknu se můžete docela snadno vyhnout tím, že oba výpisy zabalíte do transakce.