Typowy sposób, w jaki robię te rzeczy w pg, to:ładowanie surowych danych pasujących do tabeli docelowej do tabeli tymczasowej (bez ograniczeń) za pomocą kopiowania, łączenia (zabawna część), zysku.
Napisałem funkcję merge_by_key specjalnie dla tych sytuacji:
http://mbk.projects.postgresql.org/
Dokumenty nie są zbyt przyjazne, ale proponuję dać im dobre spójrz.