Con PostgreSQL 9.5, esta es ahora una funcionalidad nativa (como la que ha tenido MySQL durante varios años):
INSERTAR... EN CONFLICTO NO HACER NADA/ACTUALIZAR ("UPSERT")
9.5 brinda soporte para operaciones "UPSERT". INSERT se amplía para aceptar una cláusula ON CONFLICT DO UPDATE/IGNORE. Esta cláusula especifica una acción alternativa a tomar en caso de una posible infracción duplicada.
...
Otro ejemplo de nueva sintaxis:
INSERT INTO user_logins (username, logins)
VALUES ('Naomi',1),('James',1)
ON CONFLICT (username)
DO UPDATE SET logins = user_logins.logins + EXCLUDED.logins;