Avec PostgreSQL 9.5, il s'agit désormais d'une fonctionnalité native (comme MySQL l'a depuis plusieurs années) :
INSÉRER ... EN CAS DE CONFLIT, NE RIEN FAIRE/METTRE À JOUR ("UPSERT")
9.5 apporte la prise en charge des opérations "UPSERT". INSERT est étendu pour accepter une clause ON CONFLICT DO UPDATE/IGNORE. Cette clause spécifie une action alternative à entreprendre en cas de double violation potentielle.
...
Autre exemple de nouvelle syntaxe :
INSERT INTO user_logins (username, logins)
VALUES ('Naomi',1),('James',1)
ON CONFLICT (username)
DO UPDATE SET logins = user_logins.logins + EXCLUDED.logins;