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))?

questionAnswers(3)

yourAnswerToTheQuestion