Con PostgreSQL 9.5, questa è ora una funzionalità nativa (come MySQL ha avuto per diversi anni):
INSERT... IN CONFLITTO NON FARE NULLA/AGGIORNA ("UPSERT")
9.5 offre il supporto per le operazioni "UPSERT". INSERT è esteso per accettare una clausola ON CONFLICT DO UPDATE/IGNORE. Questa clausola specifica un'azione alternativa da intraprendere in caso di una presunta violazione duplicata.
...
Ulteriore esempio di nuova sintassi:
INSERT INTO user_logins (username, logins)
VALUES ('Naomi',1),('James',1)
ON CONFLICT (username)
DO UPDATE SET logins = user_logins.logins + EXCLUDED.logins;