PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm cách nào để nhập tệp JSON vào PostgreSQL?

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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chạy PostgreSQL bằng Amazon RDS

  2. ngủ đông không thể nhận giá trị trình tự tiếp theo

  3. Tham gia bên trong &tham gia bên ngoài; thứ tự của các bảng trong từ có quan trọng không?

  4. Rails tự động gán id đã tồn tại

  5. Chuyển tên bảng làm tham số trong psycopg2