Eu tenho um ajudante que está gerando algum código para fazer atualizações em massa para mim e gera SQL que se parece com isso:
(Os campos ativo e principal são do tipo boolean
)
UPDATE fields as t set "active" = new_values."active","core" = new_values."core"
FROM (values
(true,NULL,3419),
(false,NULL,3420)
) as new_values("active","core","id") WHERE new_values.id = t.id;
No entanto, falha com:
ERROR: column "core" is of type boolean but expression is of type text
Posso fazê-lo funcionar adicionando ::boolean
aos valores nulos, mas isso parece estranho, por que NULL é considerado do tipo TEXT
?
Também é um pouco difícil de converter, porque seria necessário um retrabalho do código para que ele soubesse para qual tipo deve converter NULLs (a lista de colunas e valores está sendo gerada automaticamente a partir de uma matriz simples de objetos JSON) .
Por que isso é necessário e existe uma solução mais elegante que não exija que o código gerador conheça o tipo de NULLs?
Se for relevante, estou usando sequelize no Node.JS para fazer isso, mas também estou obtendo o mesmo resultado no cliente de linha de comando do Postgres.
fonte
Cannot cast type boolean to bigint in column 1
(os pontos de erro na :: entre a declaração primeiros campos)fields
possui 3 colunas,(active, core, id)
com os tipos booleano, booleano e int / bigint. Sua tabela possui mais colunas ou tipos diferentes ou as colunas são definidas em ordem diferente?