単一のセットベースの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の非常によく似たケース: