आप JSON को एक SQL कथन में फीड कर सकते हैं जो जानकारी को निकालता है और उसे तालिका में सम्मिलित करता है। अगर JSON एट्रिब्यूट का नाम बिल्कुल टेबल कॉलम जैसा है, तो आप कुछ इस तरह कर सकते हैं:
with customer_json (doc) as (
values
('[
{
"id": 23635,
"name": "Jerry Green",
"comment": "Imported from facebook."
},
{
"id": 23636,
"name": "John Wayne",
"comment": "Imported from facebook."
}
]'::json)
)
insert into customer (id, name, comment)
select p.*
from customer_json l
cross join lateral json_populate_recordset(null::customer, doc) as p
on conflict (id) do update
set name = excluded.name,
comment = excluded.comment;
नए ग्राहक जोड़े जाएंगे, मौजूदा ग्राहकों को अपडेट किया जाएगा। "मैजिक" भाग json_populate_recordset(null::customer, doc)
है जो JSON ऑब्जेक्ट्स का एक रिलेशनल प्रतिनिधित्व उत्पन्न करता है।
उपरोक्त एक तालिका परिभाषा को इस तरह मानता है:
create table customer
(
id integer primary key,
name text not null,
comment text
);
यदि डेटा एक फ़ाइल के रूप में प्रदान किया जाता है, तो आपको पहले उस फ़ाइल को डेटाबेस में किसी तालिका में रखना होगा। कुछ इस तरह:
create unlogged table customer_import (doc json);
फिर फ़ाइल को उस तालिका की एक पंक्ति में अपलोड करें, उदा। \copy
का उपयोग कर psql
. में कमांड (या जो भी आपका SQL क्लाइंट ऑफ़र करता है):
\copy customer_import from 'customers.json' ....
फिर आप उपरोक्त कथन का उपयोग कर सकते हैं, बस सीटीई को हटा दें और स्टेजिंग टेबल का उपयोग करें:
insert into customer (id, name, comment)
select p.*
from customer_import l
cross join lateral json_populate_recordset(null::customer, doc) as p
on conflict (id) do update
set name = excluded.name,
comment = excluded.comment;