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: