Com o PostgreSQL 9.5, essa agora é uma funcionalidade nativa (como o MySQL tem há vários anos):
INSERIR ... NO CONFLITO, NÃO FAÇA NADA/ATUALIZE ("UPSERT")
9.5 traz suporte para operações "UPSERT". INSERT é estendido para aceitar uma cláusula ON CONFLICT DO UPDATE/IGNORE. Esta cláusula especifica uma ação alternativa a ser tomada no caso de uma possível violação duplicada.
...
Mais um exemplo de nova sintaxe:
INSERT INTO user_logins (username, logins)
VALUES ('Naomi',1),('James',1)
ON CONFLICT (username)
DO UPDATE SET logins = user_logins.logins + EXCLUDED.logins;