sql - PostgreSQL: Remove attribute from JSON column -


मुझे एक जेसन टाइप कॉलम से कुछ विशेषताओं को निकालना होगा।

तालिका:

  बनाएँ तालिका my_table (id VARCHAR (80), डेटा json); My_table (आईडी, डेटा) मूल्यों में प्रविष्ट करें ('ए', '{"एट्रिए": 1, "एट्रिब": सच है, "एट्रिसी": ["एक", "बी", "सी"]}');  

अब, मुझे कॉलम डेटा से attrB निकालना होगा।

कुछ ऐसा तालिका को बदलना My_table ड्रॉप कॉलम डेटा- & gt; 'attrB'; अच्छा होगा लेकिन अस्थायी तालिका के साथ एक रास्ता भी पर्याप्त होगा।

अपडेट : 9.5+ के लिए, वहां स्पष्ट ऑपरेटर्स हैं जिनका उपयोग आप jsonb के साथ कर सकते हैं (यदि आपके पास json टाइप किया गया कॉलम है, तो आप उपयोग को संशोधित करने के लिए डाले जा सकते हैं):

JSON ऑब्जेक्ट (या, एक सरणी से) से एक कुंजी (या एक इंडेक्स) को हटाना - ऑपरेटर के साथ किया जा सकता है:

  SELECT jsonb '{"एक": 1, "बी": 2}' - 'ए', - jsonb '{"b": 2}' jsonb '["a", 1, "b", 2] उत्पन्न करेगा' - 1 - JSON पदानुक्रम में गहराई से,  # - <के साथ किया जा सकता है - jsonb '["a", "b", 2]'  

/ Code> ऑपरेटर:

  SELECT '{"a": [null, {"b": [3.14]}]}' # - '{a, 1, b, 0}' 9.4 के लिए, आप मूल उत्तर के संशोधित संस्करण का उपयोग कर सकते हैं ( नीचे), लेकिन एक JSON स्ट्रिंग एकत्रित करने के बजाय, आप  json  ऑब्जेक्ट में सीधे  Json_object_agg () 

संबंधित: अन्य JSON manipulations whithin PostgreSQL:

मूल उत्तर (PostgreSQL 9.3 पर लागू होता है):

यदि आपके पास कम से कम PostgreSQL 9.3 है, तो आप अपने ऑब्जेक्ट को json_each () के साथ जोड़े में विभाजित कर सकते हैं और अपने अवांछित फ़ील्ड को फ़िल्टर कर सकते हैं, फिर मैन्युअल रूप से फिर से JSON का निर्माण कुछ ऐसा:

  डेटा का चयन करें :: पाठ :: json AS पहले, ('{'} array_to_string (array_agg (to_json (l.key) || ':' || l.value ), ','): '}') :: जेएसएनए एफडीआर (वैल्यू ('{"एट्रिए": 1, "एट्र बी": सच है, "एट्र सी": ["ए", "बी", "सी एएस एल ग्रुप द्वारा डेटा :: टेक्स्ट   v / s>   9.2 (या निचला) के साथ यह संभव नहीं है। 

संपादित करें :

एक अधिक सुविधाजनक फॉर्म एक फ़ंक्शन बनाने के लिए है, जो json फ़ील्ड में किसी भी संख्या में विशेषताओं को निकाल सकते हैं:

2 संपादित करें : string_agg () < कोड> array_to_string (array_agg ())

  फ़ंक्शन बनाएं "json_object_delete_keys" ("json" json, VARIADIC "keys_to_delete" text []) जेसन भाषा एसक्यूएल इम्पट्यूबल स्ट्राइक रिटर्न $ फ़ंक्शन $ SELECT COALESCE ('SELECT (' {'} string_agg (to_json ("key")}' ':' 'value ",', '))'} ') से json_each (" json ") जहां "कश्मीर Ey "& lt; & gt; सभी ("keys_to_delete")), '{}') :: JSON $ फ़ंक्शन $;  

इस फ़ंक्शन के साथ, आपको बस नीचे दिए गए प्रश्न को चलाने की ज़रूरत है:

  my_table सेट डेटा UPDATE = json_object_delete_keys (डेटा, 'attrB') ;  

Comments

Popular posts from this blog

c# - The item with identity 'Id' already exists in the metadata collection. Parameter name: item -

sql - PostgreSQL automatically update row at specific date -

jsp - No mapping found for HTTP request with URI with annotation config Spring MVC and Jetty -