Обичайният начин, по който правя тези неща в pg, е:заредете необработени данни, съответстващи на целевата таблица, във временна таблица (без ограничения), използвайки копиране, сливане (забавната част), печалба.
Написах функция merge_by_key специално за тези ситуации:
http://mbk.projects.postgresql.org/
Документите не са много приятелски настроени, но бих препоръчал да му дадете добра виж.