単一のセットベースのSQLコマンドは、ループするよりもはるかに効率的です。
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?
元の質問に答えるには:
jsonbを変換しようとしていたため integerへの値 。あなたのソリューションでは、->>が必要であることがすでにわかっています。 ->の代わりに演算子 textを抽出するには 、integerにキャストできます 。
2回目の試行で2番目のエラーが追加されました:
t->'social'::int ストライク>
上記に加えて:演算子の優先順位 。キャスト演算子:: json演算子->よりも強力にバインドします 。あなたがすでに自分自身を見つけたように、あなたは本当に欲しいです:
(t->>'social')::int
dba.SEの非常によく似たケース: