Bạn có thể cung cấp JSON vào một câu lệnh SQL trích xuất thông tin và chèn thông tin đó vào bảng. Nếu các thuộc tính JSON có tên chính xác như các cột trong bảng, bạn có thể làm như sau:
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;
Khách hàng mới sẽ được thêm vào, những khách hàng hiện có sẽ được cập nhật. Phần "ma thuật" là json_populate_recordset(null::customer, doc)
tạo ra một biểu diễn quan hệ của các đối tượng JSON.
Ở trên giả định một định nghĩa bảng như sau:
create table customer
(
id integer primary key,
name text not null,
comment text
);
Nếu dữ liệu được cung cấp dưới dạng tệp, trước tiên bạn cần đặt tệp đó vào bảng nào đó trong cơ sở dữ liệu. Một cái gì đó như thế này:
create unlogged table customer_import (doc json);
Sau đó, tải tệp lên thành một hàng của bảng đó, ví dụ:sử dụng \copy
lệnh trong psql
(hoặc bất cứ thứ gì mà ứng dụng khách SQL của bạn cung cấp):
\copy customer_import from 'customers.json' ....
Sau đó, bạn có thể sử dụng câu lệnh trên, chỉ cần loại bỏ CTE và sử dụng bảng dàn:
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;