A maneira usual de fazer essas coisas na página é:carregar dados brutos correspondentes à tabela de destino na tabela temporária (sem restrições) usando cópia, mesclagem (a parte divertida), lucro.
Eu escrevi uma função merge_by_key especificamente para essas situações:
http://mbk.projects.postgresql.org/
Os documentos não são muito amigáveis, mas sugiro dar uma boa olhar.