एक एकल सेट-आधारित 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 . में डाला जा सकता है ।
आपके दूसरे प्रयास ने दूसरी त्रुटि जोड़ दी:
<स्ट्राइक>t->'social'::int स्ट्राइक>
उपरोक्त के अलावा:ऑपरेटर प्राथमिकताए> . कास्ट ऑपरेटर :: json ऑपरेटर से अधिक मजबूत बांधता है -> . जैसे आपने खुद को पहले ही पा लिया है, आप वास्तव में चाहते हैं:
(t->>'social')::int
dba.SE पर बहुत समान मामला: