考えられる解決策は、新しい制約を作成する前にDROPIFEXISTSを使用することです。
ALTER TABLE foo DROP CONSTRAINT IF EXISTS bar;
ALTER TABLE foo ADD CONSTRAINT bar ...;
information_schemaやカタログをクエリするよりも簡単なようですが、巨大なテーブルでは常に制約が再作成されるため、処理が遅くなる可能性があります。
編集2015-07-13:Kevは、制約が存在せず、強制されていない場合、私のソリューションは短いウィンドウを作成することを彼の回答で指摘しました。これは事実ですが、トランザクションで両方のステートメントをラップすることで、このようなウィンドウを非常に簡単に回避できます。