PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como upsert no Postgres em conflito em uma das 2 colunas?


Sim, e esse comportamento é padrão. Qualquer violação de restrição exclusiva constitui um conflito e, em seguida, o UPDATE é executado se ON CONFLICT DO UPDATE é especificado. O INSERT instrução pode ter apenas um único ON CONFLICT cláusula, mas o conflict_target dessa cláusula pode especificar vários nomes de coluna, cada um dos quais deve ter um índice, como um UNIQUE restrição. No entanto, você está limitado a uma única conflict_action e você não terá informações sobre qual restrição causou o conflito ao processar essa ação. Se você precisar desse tipo de informação ou ação específica dependendo da violação de restrição, você deve escrever uma função de gatilho, mas perderá a atomicidade muito importante do INSERT ... ON CONFLICT DO ... declaração.