एक एकल सेट-आधारित 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 पर बहुत समान मामला: