Obvyklý způsob, jak tyto věci dělám v pg, je:načíst nezpracovaná data odpovídající cílové tabulce do dočasné tabulky (bez omezení) pomocí kopírování, sloučení (zábavná část), zisk.
Napsal jsem funkci merge_by_key speciálně pro tyto situace:
http://mbk.projects.postgresql.org/
Dokumenty nejsou příliš přátelské, ale doporučil bych to dát dobře podívejte se.