У меня проблема, когда я пытаюсь обновить многие строки одновременно.
Вот таблица и запрос, которые я использую (упрощенные для лучшего чтения):
Таблица
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
Этот запрос работает отлично, но когда я пытаюсь выполнить запрос, где все значения x или y равны null, я получаю сообщение об ошибке:
запрос с нулями
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))
?