Postgres não implementou um equivalente a
INSERT OR REPLACE
. Do ON CONFLICT
docs (ênfase minha):
Pode ser DO NOTHING ou uma cláusula DO UPDATE especificando os detalhes exatos da ação UPDATE a ser executada em caso de conflito.
Embora não forneça um atalho para substituição,
ON CONFLICT DO UPDATE
se aplica de maneira mais geral, pois permite definir novos valores com base em dados preexistentes. Por exemplo:INSERT INTO users (id, level)
VALUES (1, 0)
ON CONFLICT (id) DO UPDATE
SET level = users.level + 1;