En enkelt sæt-baseret SQL-kommando er langt mere effektiv end looping:
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?
Sådan besvarer du dit oprindelige spørgsmål:
Fordi du prøvede at konvertere jsonb
værdi til heltal
. I din løsning har du allerede fundet ud af, at du har brug for -> for at udtrække
tekst
, som kan castes til heltal
.
Dit andet forsøg tilføjede en anden fejl:
t->'social'::int
Ud over ovenstående:operatørpræference . Cast-operatøren ::
binder stærkere end json-operatoren ->
. Som du allerede har fundet dig selv, ønsker du virkelig:
(t->>'social')::int
Meget lignende sag på dba.SE: