PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

Jsonb सदस्य से पूर्णांक स्तंभ अद्यतन करना विफल रहता है:स्तंभ पूर्णांक प्रकार का है लेकिन अभिव्यक्ति प्रकार jsonb का है

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL में विदेशी कुंजी वाली पंक्तियां हटाएं

  2. उपवर्गों पर हाइबरनेट में प्रति तालिका अलग अनुक्रम निर्दिष्ट करना

  3. Postgresql - विशाल तालिका (100 मिलियन पंक्तियों) को अद्यतन करने के लिए कैसे गति करें?

  4. यदि PostgreSQL के लिए मौजूद नहीं है तो डेटाबेस बनाएं सिमुलेट करें?

  5. INSERT का उपयोग करें ... संघर्ष पर कुछ भी नहीं लौटाने वाली विफल पंक्तियाँ