Met PostgreSQL 9.5 is dit nu native functionaliteit (zoals MySQL al enkele jaren heeft):
INSERT ... BIJ CONFLICT NIETS DOEN/UPDATE ("UPSERT")
9.5 biedt ondersteuning voor "UPSERT"-bewerkingen. INSERT is uitgebreid om een ON CONFLICT DO UPDATE/IGNORE-clausule te accepteren. Deze clausule specificeert een alternatieve actie die moet worden ondernomen in het geval van een mogelijke dubbele overtreding.
...
Verder voorbeeld van nieuwe syntaxis:
INSERT INTO user_logins (username, logins)
VALUES ('Naomi',1),('James',1)
ON CONFLICT (username)
DO UPDATE SET logins = user_logins.logins + EXCLUDED.logins;