Med PostgreSQL 9.5 är detta nu inbyggd funktionalitet (som MySQL har haft i flera år):
INSERT ... VID KONFLIKT GÖR INGENTING/UPPDATERA ("UPSERT")
9.5 ger stöd för "UPSERT"-operationer. INSERT utökas för att acceptera en ON CONFLICT DO UPDATE/IGNORE-klausul. Den här klausulen specificerar en alternativ åtgärd som ska vidtas i händelse av en potentiell dubblettöverträdelse.
...
Ytterligare exempel på ny syntax:
INSERT INTO user_logins (username, logins)
VALUES ('Naomi',1),('James',1)
ON CONFLICT (username)
DO UPDATE SET logins = user_logins.logins + EXCLUDED.logins;