Casting NULL type podczas aktualizacji wielu wierszy

Mam problem, gdy próbuję zaktualizować wiele wierszy jednocześnie.

Oto tabela i zapytanie, którego używam (uproszczone dla lepszego czytania):

stół

CREATE TABLE foo
(
    pkid integer,
    x integer,
    y integer
)

pytanie

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

Ta kwerenda działa doskonale, ale gdy próbuję wykonać zapytanie, gdzie wszystkox luby wartości są puste, pojawia się błąd:

zapytanie z zerami

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

błąd

ERROR:  column "x" is of type integer but expression is of type text
LINE 1: UPDATE foo SET x=t.x FROM

Jedynym sposobem na naprawienie tego jest zmiana co najmniej jednej z wartości(null, 20, 1) do(null:int, 50, 2) ale nie mogę tego zrobić, ponieważ mam funkcję, która generuje zapytanie „aktualizuj wiele wierszy” i nie wie nic o typach kolumn.

Jakie jest najlepsze rozwiązanie tutaj? Czy jest jakieś lepsze zapytanie o aktualizację dla wielu wierszy? Czy istnieje jakakolwiek funkcja lub składniaAS t(x:gettype(foo.x), y:gettype(foo.y), pkid:gettype(foo.pkid))?

questionAnswers(3)

yourAnswerToTheQuestion