http://www.postgresql.org/docs/9.0/static /sql-createtable.html dans la section "Contraintes d'unicité non différées" - "Lorsqu'une contrainte UNIQUE ou PRIMARY KEY n'est pas différée, PostgreSQL vérifie l'unicité immédiatement chaque fois qu'une ligne est insérée ou modifiée."
Changer votre contrainte unique en reportable retardera la vérification jusqu'à la fin de la mise à jour. Utilisez SET CONSTRAINTS pour désactiver au niveau de la session (ce qui est ennuyeux et répétitif) ou supprimez et recréez la contrainte d'unicité avec l'option deferrable (je ne connais pas de construction ALTER pour le faire sans suppression).