PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Das Aktualisieren der Integer-Spalte aus dem Jsonb-Mitglied schlägt fehl mit:Die Spalte ist vom Typ Integer, aber der Ausdruck ist vom Typ Jsonb

Ein einzelner satzbasierter SQL-Befehl ist weitaus effizienter als Schleifen:

UPDATE words_social w
SET    social = (iu->>'social')::int
FROM   JSONB_ARRAY_ELEMENTS(in_users) iu  -- in_user = function variable
WHERE  w.sid = iu->>'sid';                -- type of sid?

Um Ihre ursprüngliche Frage zu beantworten:

Weil Sie versucht haben, den jsonb zu konvertieren Wert auf integer . In Ihrer Lösung haben Sie bereits festgestellt, dass Sie den ->> benötigen Operator anstelle von -> um text zu extrahieren , die in integer umgewandelt werden kann .

Beim zweiten Versuch wurde ein zweiter Fehler hinzugefügt:

t->'social'::int

Zusätzlich zu Obigem:Operatorvorrang . Der Umwandlungsoperator :: bindet stärker als der json-Operator -> . Wie Sie sich bereits gefunden haben, möchten Sie wirklich:

(t->>'social')::int

Sehr ähnlicher Fall bei dba.SE: