Estou usando o PostgreSQL como meu banco de dados. E eu preciso criar uma entrada no banco de dados, e caso já exista, basta atualizar seus campos, mas um dos campos deve ser atualizado somente se não estiver definido.
Eu usei informações desta pergunta: https://stackoverflow.com/questions/13305878/dont-update-column-if-update-value-is-null , está bastante relacionado ao que eu tenho.
Tentei usar esta consulta, mas quando a executo, dá erro com Column reference 'affiliate_code' is ambiguous
:
INSERT INTO accounts (id, token, affiliate_code)
VALUES (value1, value2, value3)
ON CONFLICT (id) DO
UPDATE SET token = value2,
affiliate_code = COALESCE(affiliate_code, value3);
(os valores reais são substituídos, é claro).
Se eu substituir affiliate_code = COALESCE(affiliate_code, value3)
por affiliate_code = value3
, tudo funciona, mas não da maneira que eu quero que funcione.
Como posso fazer isso funcionar?
Aqui está como minha tabela é definida:
CREATE TABLE accounts (
id VARCHAR NOT NULL UNIQUE,
token VARCHAR NOT NULL,
affiliate_code VARCHAR
);
Dos documentos ,
Então, em vez disso, tente isso por ypercubeᵀᴹ
Esta resposta me ajudou a resolver um problema de coluna ambígua um pouco diferente. Eu tenho uma mesa onde fazemos roll-ups diários na mesma mesa várias vezes por dia. Precisamos recalcular o acúmulo diário de hora em hora, o que significa que estamos atualizando a mesma linha 24 vezes por dia.
Parafraseando o anterior: