La façon habituelle de faire ces choses dans pg est la suivante :charger les données brutes correspondant à la table cible dans la table temporaire (sans contraintes) en utilisant copier, fusionner (la partie amusante), profit.
J'ai écrit une fonction merge_by_key spécifiquement pour ces situations :
http://mbk.projects.postgresql.org/
Les docs ne sont pas très amicaux, mais je suggérerais de lui donner un bon regarde.