Mit PostgreSQL 9.5 ist dies nun eine native Funktionalität (wie sie MySQL seit mehreren Jahren hat):
INSERT ... ON CONFLICT DO NOTHING/UPDATE ("UPSERT")
9.5 bringt Unterstützung für "UPSERT"-Operationen. INSERT wurde erweitert, um eine ON CONFLICT DO UPDATE/IGNORE-Klausel zu akzeptieren. Diese Klausel legt eine alternative Maßnahme fest, die im Falle eines möglichen doppelten Verstoßes zu ergreifen ist.
...
Weiteres Beispiel für neue Syntax:
INSERT INTO user_logins (username, logins)
VALUES ('Naomi',1),('James',1)
ON CONFLICT (username)
DO UPDATE SET logins = user_logins.logins + EXCLUDED.logins;