Estou usando o PostgreSQL como meu banco de dados. E preciso criar uma entrada no banco de dados e, se ela já existir, basta atualizar seus campos, mas um dos campos deve ser atualizado apenas se não estiver definido.
Usei as informações desta pergunta: /programming/13305878/dont-update-column-if-update-value-is-null , está bastante relacionado ao que tenho.
Tentei usar esta consulta, mas quando a executo, ela erros 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
);
= COALESCE(accounts.affiliate_code, EXCLUDED.affiliate_code)
.