С PostgreSQL 9.5 това вече е естествена функционалност (както MySQL има от няколко години):
ВМЪКВАНЕ... ПРИ КОНФЛИКТ НЕ ПРАВЕТЕ НИЩО/АКТУАЛИЗИРАНЕ („UPSERT“)
9.5 предоставя поддръжка за операции "UPSERT". INSERT е разширен, за да приеме клауза ON CONFLICT DO UPDATE/IGNORE. Тази клауза посочва алтернативно действие, което да предприемете в случай на евентуално дублирано нарушение.
...
Допълнителен пример за нов синтаксис:
INSERT INTO user_logins (username, logins)
VALUES ('Naomi',1),('James',1)
ON CONFLICT (username)
DO UPDATE SET logins = user_logins.logins + EXCLUDED.logins;