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: