Mit Postgres 9.5 gibt es eine Konfliktlösung bei Insert's auf Tupel welche schon existieren oder Updates wenn Tupels noch nicht existieren. Es gibt auch einen Workaround dies mit zwei Queries zu tun.
UPDATE table SET field='C', field2='Z' WHERE id=3;
INSERT INTO table (id, field, field2)
SELECT 3, 'C', 'Z'
WHERE NOT EXISTS (SELECT 1 FROM table WHERE id=3);