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

JSON सरणी में JSON ऑब्जेक्ट का PostgreSQL सेट फ़ील्ड

यह हर अपडेट पर जोंस ऐरे को फिर से बनाकर संभव है।

तालिका निर्माण और उदाहरण डेटा प्रविष्टि के लिए SQL:

CREATE TABLE test_table(
  id BIGSERIAL PRIMARY KEY ,
  game TEXT,
  players JSONB
);

INSERT INTO test_table(game, players)
    VALUES
      ('chess', '[{"name": "Joe", "role": "admin"}, {"name": "Mike", "role": "user"}]'),
      ('football', '[{"name": "Foo", "role": "user"}, {"name": "Bar", "role": "user"}]');

डाला गया डेटा:

+----+----------+----------------------------------------------------------------------+
| id |   game   |                               players                                |
+----+----------+----------------------------------------------------------------------+
|  1 | chess    | [{"name": "Joe", "role": "admin"}, {"name": "Mike", "role": "user"}] |
|  2 | football | [{"name": "Foo", "role": "user"}, {"name": "Bar", "role": "user"}]   |
+----+----------+----------------------------------------------------------------------+

क्वेरी अपडेट करें:

WITH json_rows AS
(SELECT id, jsonb_array_elements(players) as json_data FROM test_table
WHERE game = 'chess'),
 updated_rows AS (
    SELECT
      id,
      array_to_json(array_agg(
      CASE WHEN json_data -> 'name' = '"Joe"'
        THEN jsonb_set(json_data, '{role}', '"user"')
      ELSE json_data END)) as updated_json
    FROM json_rows
    GROUP BY id
)
UPDATE test_table SET players = u.updated_json
FROM updated_rows u
WHERE test_table.id = u.id;

क्वेरी के परिणाम:

+----+----------+---------------------------------------------------------------------+
| id |   game   |                               players                               |
+----+----------+---------------------------------------------------------------------+
|  2 | football | [{"name": "Foo", "role": "user"}, {"name": "Bar", "role": "user"}]  |
|  1 | chess    | [{"name": "Joe", "role": "user"}, {"name": "Mike", "role": "user"}] |
+----+----------+---------------------------------------------------------------------+

क्वेरी निम्न तरीके से काम करती है:

  1. json सरणी को json पंक्तियों में बदलें और उन्हें game . द्वारा फ़िल्टर करें संपत्ति। यह json_rows . बनाकर किया जाता है सीटीई।

  2. json डेटा को json पंक्तियों में अपडेट करें जहाँ उपयोगकर्ता "Joe" पाया जाता है।

  3. एक बार जब आपके पास नए json मान हों, तो बस आईडी के आधार पर एक अपडेट करें।

नोट: जैसा कि आप देख सकते हैं, वर्तमान कार्यान्वयन में जोंस सरणी को फिर से बनाया जाता है (केवल उन पंक्तियों में जिन्हें अद्यतन करने की आवश्यकता है)। यह सरणी के अंदर तत्वों के क्रम में परिवर्तन का कारण हो सकता है।




  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. क्या PostgreSQL इंडेक्स सरणी कॉलम कर सकता है?

  3. Many2many फ़ील्ड भरना (odoo 8)

  4. Django ऑपरेशनल एरर:कनेक्शन के लिए नई प्रक्रिया को फोर्क नहीं कर सका

  5. INSERT से RETURNING ... ON CONFLICT . में बहिष्कृत पंक्तियों को कैसे शामिल करें