Eu tenho uma tabela com colunas 'id', 'a', 'b, 'c', 'd'. Além disso, tenho uma restrição exclusiva em ('a', 'b', 'c', 'd') para que nenhuma entrada possa ser adicionada onde todos esses campos sejam iguais. Quero atualizar as entradas, por exemplo, tenho no banco de dados:
1 a_value b_value c_value d_value
e eu estou perturbando
INSERT INTO MYTABLE(a, b, c, d) values ('a_value', 'b_value', 'c_value', 'd_value__new') on conflict (a, b, c, d) DO UPDATE SET d= excluded.d;
Mas isso cria uma nova entrada quando eu esperava que atualizasse d_value para d_value_new na entrada existente. O que estou fazendo de errado?
Veja exemplo aqui:
Pelo que li nos comentários, você deseja obter o seguinte comportamento: ao fazer um INSERT se os valores das colunas (a, b, c) já existirem em uma linha, atualize a coluna d dessa linha para o novo valor. Se for esse o caso, então você precisa colocar a restrição exclusiva em (a, b, c) NOT d , já que com d ela não será acionada já que você insere um novo valor para d). Altere também a instrução ON CONFLICT para apenas verificar (a,b, c). Nota: com esta restrição você não poderá ter mais de 1 linha com os mesmos valores para (a, b, c). Aqui está um problema com essas mudanças, confira https://dbfiddle.uk/JsLZgGZW . No futuro, certifique-se de fornecer informações mais precisas sobre o que deseja alcançar para obter uma resposta precisa.