कई कॉलम को json में पोस्ट करता है


23

मैं पोस्टग्रेजल 9.3.4 चला रहा हूं। मेरे पास 3 फ़ील्ड्स वाली एक तालिका है:

id   name  addr
---  ----  ----
1    n1    ad1
2    n2    ad2
...

मुझे फ़ील्ड्स के साथ डेटा को एक नई तालिका में ले जाने की आवश्यकता है:

id   data
---  ----
1    {'name': 'n1', 'addr': 'ad1'}
2    {'name': 'n2', 'addr': 'ad2'}
...

row_to_jsonमेरे लिए समाधान के रूप में अच्छी तरह से परिणाम के लिए SELECT t.id, row_to_json(t) as data FROM (select id, name, addr from myt) tकहते हैं नहीं idहै। क्या मेरे डेटा फ़ील्ड में मेरे द्वारा आवश्यक फ़ील्ड (नाम और अतिरिक्त) चुनने का कोई तरीका है?


मुझे यकीन नहीं है कि उत्तर सही है। मैंने इसे 2 साल पहले पूछा था। मैंने भी अपने सवाल का फिर से जवाब दिया लेकिन इसे सही नहीं माना।
अलीबज

जवाबों:


52

json_build_object()Postgres 9.4+ में एक बेहतर विकल्प है :

SELECT id, json_build_object('name', name, 'addr', addr) AS data
FROM   myt;

लेकिन row_to_json()पोस्टग्रेज 9.3 में एक सरल और तेज़ तरीका भी है :

SELECT id, row_to_json((SELECT d FROM (SELECT name, addr) d)) AS data
FROM   myt;

db <> यहाँ fiddle यहाँ
पुरानी SQL Field Postgres 9.6 पर है।

संबंधित जवाब:


यह एक बेहतर उत्तर है, और फिडेल के पास प्रमाण है।
MIguelele

5

मुझे इस लिंक से उत्तर मिला :

select * from (
  select id,
    (
      select row_to_json(d)
      from (
        select name, addr
        from myt d
        where d.id=s.id
      ) d
    ) as data
  from myt s
)

मत अपने जवाब को सही के रूप में चिह्नित करना भूल जाइए (हालांकि कोई बिंदु नहीं :-()। मुझे नहीं लगता कि आप इसे तुरंत कर सकते हैं, लेकिन यह भविष्य में इसी तरह के प्रश्न के साथ किसी की मदद कर सकता है।
Vérace

2
बाहरी क्वेरी में अनुपस्थित तालिका उपनाम से अलग, यह आवश्यक से अधिक जटिल और महंगी भी है। मैंने एक और उत्तर को एक बेला के साथ प्रदर्शित करने के लिए जोड़ा।
इरविन ब्रान्डेसटेटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.