Jediný příkaz SQL založený na sadě je mnohem efektivnější než smyčkování:
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?
Odpověď na vaši původní otázku:
Protože jste se pokoušeli převést jsonb hodnotu na integer . Ve vašem řešení jste již zjistili, že potřebujete ->> operátor namísto -> extrahovat text , které lze přetypovat na integer .
Váš druhý pokus přidal druhou chybu:
t->'social'::int
Kromě výše uvedeného:přednost operátora . Operátor přetypování :: váže silnější než operátor json -> . Jako už jste se našli, opravdu chcete:
(t->>'social')::int
Velmi podobný případ na dba.SE: