Casting tipo NULL ao atualizar várias linhas
Eu tenho um problema quando tento atualizar várias linhas ao mesmo tempo.
Aqui está a tabela e consulta que eu uso (simplificado para melhor leitura):
mesa
CREATE TABLE foo
(
pkid integer,
x integer,
y integer
)
inquerir
UPDATE foo SET x=t.x, y=t.y FROM
(VALUES (50, 50, 1),
(100, 120, 2))
AS t(x, y, pkid) WHERE foo.pkid=t.pkid
Esta consulta funciona perfeitamente, mas quando tento executar uma consulta onde todosx ouy valores são nulos, eu recebo um erro:
consulta com nulos
UPDATE foo SET x=t.x, y=t.y FROM
(VALUES (null, 20, 1),
(null, 50, 2))
AS t(x, y, pkid) WHERE foo.pkid=t.pkid
erro
ERROR: column "x" is of type integer but expression is of type text
LINE 1: UPDATE foo SET x=t.x FROM
A única maneira de corrigir isso é alterar pelo menos um dos valores(null, 20, 1)
para(null:int, 50, 2)
mas não posso fazer isso, já que tenho uma função que gera essa consulta "atualizar várias linhas" e não sabe nada sobre os tipos de colunas.
Qual a melhor solução aqui? Existe alguma consulta de atualização melhor para várias linhas? Existe alguma função ou sintaxe comoAS t(x:gettype(foo.x), y:gettype(foo.y), pkid:gettype(foo.pkid))
?