Casting vom Typ NULL beim Aktualisieren mehrerer Zeilen

Ich habe ein Problem, wenn ich versuche, viele Zeilen gleichzeitig zu aktualisieren.

Hier ist die Tabelle und Abfrage, die ich verwende (zum besseren Lesen vereinfacht):

Tabelle

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

Abfrage

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

Diese Abfrage funktioniert einwandfrei, aber wenn ich versuche, eine Abfrage auszuführen, wo allex odery Werte sind null, ich erhalte eine Fehlermeldung:

Abfrage mit Nullen

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

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

Die einzige Möglichkeit, dies zu beheben, besteht darin, mindestens einen der Werte zu ändern(null, 20, 1) zu(null:int, 50, 2) Aber ich kann das nicht tun, da ich eine Funktion habe, die diese Abfrage "Mehrere Zeilen aktualisieren" generiert und nichts über die Spaltentypen weiß.

Was ist hier die beste Lösung? Gibt es eine bessere Update-Abfrage für mehrere Zeilen? Gibt es eine Funktion oder Syntax wieAS t(x:gettype(foo.x), y:gettype(foo.y), pkid:gettype(foo.pkid))?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage