Приведение типа NULL при обновлении нескольких строк

У меня проблема, когда я пытаюсь обновить несколько строк одновременно.

Вот таблица и запрос, которые я использую (упрощено для лучшего чтения):

Таблица

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

запрос

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

Этот запрос работает отлично, но когда я пытаюсь выполнить запрос, где все х или у значения равны нулю, я получаю сообщение об ошибке:

запрос с нулями

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

ошибка

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

Единственный способ исправить это - изменить хотя бы одно из значений.(null, 20, 1) в(null:int, 50, 2) Но я могу'это сделать, так как у меня есть функция, которая генерирует эти "обновить несколько строк " запрос, и это неничего не знаю о типах столбцов.

Какие'лучшее решение здесь? Есть ли лучший запрос на обновление для нескольких строк? Есть ли какая-либо функция или синтаксис, как?AS t(x:gettype(foo.x), y:gettype(foo.y), pkid:gettype(foo.pkid))

Ответы на вопрос(3)

Ваш ответ на вопрос