Anda dapat melakukan penyisipan massal berdasarkan dokumen json. Anda harus memformat ulang dokumen karena format yang ditunjukkan dalam pertanyaan aneh dan tidak praktis.
Contoh kerja lengkap:
create table example(id int primary key, email text, last_name text, first_name text);
with jsondata(jdata) as (
values
(
'[
{"id": 1, "email": "[example@sqldat.com]", "first_name": "John", "last_name": "Doe"},
{"id": 2, "email": "[example@sqldat.com]", "first_name": "Robert", "last_name": "Duncan"},
{"id": 3, "email": "[example@sqldat.com]", "first_name": "Ram", "last_name": "Das"},
{"id": 4, "email": "[example@sqldat.com]", "first_name": "Albert", "last_name": "Pinto"},
{"id": 5, "email": "[example@sqldat.com]", "first_name": "Robert", "last_name": "Peter"},
{"id": 6, "email": "[example@sqldat.com]", "first_name": "Christian", "last_name": "Lint"},
{"id": 7, "email": "[example@sqldat.com]", "first_name": "Mike", "last_name": "Hussey"},
{"id": 8, "email": "[example@sqldat.com]", "first_name": "Ralph", "last_name": "Hunter"}
]'::jsonb)
)
insert into example
select (elem->>'id')::int, elem->>'email', elem->>'last_name', elem->>'first_name'
from jsondata,
jsonb_array_elements(jdata) as elem;
Hasilnya:
select *
from example
id | email | last_name | first_name
----+---------------+-----------+------------
1 | [example@sqldat.com] | Doe | John
2 | [example@sqldat.com] | Duncan | Robert
3 | [example@sqldat.com] | Das | Ram
4 | [example@sqldat.com] | Pinto | Albert
5 | [example@sqldat.com] | Peter | Robert
6 | [example@sqldat.com] | Lint | Christian
7 | [example@sqldat.com] | Hussey | Mike
8 | [example@sqldat.com] | Hunter | Ralph
(8 rows)
Jika Anda ingin memperbarui tabel (bukan memasukkan ke dalamnya):
with jsondata(jdata) as (
-- values as above
)
update example set
email = elem->>'email',
last_name = elem->>'last_name',
first_name = elem->>'first_name'
from jsondata,
jsonb_array_elements(jdata) as elem
where id = (elem->>'id')::int;