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

Điền nhiều bảng từ một đối tượng JSON duy nhất với json_populate_recordset

3 bước:

  1. Trường truy cập của đối tượng JSON wich -> .
  2. Tạo bảng dẫn xuất từ ​​mảng bản ghi JSON bằng cách sử dụng json_populate_recordset() .
  3. Phân tách loại hàng cho INSERT lệnh.

Để sử dụng lại giá trị đầu vào cho tất cả các bảng, hãy bọc nó trong CTE sửa đổi dữ liệu :

WITH input AS (
   SELECT '{
      "tablename_a":[{"a_id":1,"b_id":2,"c_id":3},
       {"a_id":2,"b_id":51,"c_id":3}],
      "tablename_b":[{"b_id":2,"name":"John Doe", "z_id":123},
       {"b_id":51,"name":"Mary Ann", "z_id":412}],
      "tablename_c":[{"c_id":3, "OS type":"Windows 7"}],
      "tablename_z":[{"z_id":123, "Whatever":"Something"},
      {"z_id":123, "Whatever":"Something else"}]
      }'::json AS j
   )
,  a AS (
   INSERT INTO tablename_a
   SELECT t.*
   FROM   input i
        , json_populate_recordset(NULL::tablename_a, i.j->'tablename_a') t
   )
,  b AS (
   INSERT INTO tablename_b
   SELECT t.*
   FROM   input i
        , json_populate_recordset(NULL::tablename_b, i.j->'tablename_b') t
   )
   -- ... more ...
INSERT INTO tablename_z
SELECT t.*
FROM   input i
     , json_populate_recordset(NULL::tablename_z, i.j->'tablename_z') t
;

SQL Fiddle.

Sử dụng JOIN LATERAL ngầm định . Có liên quan:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SERIAL tùy chỉnh / tự động tăng thêm cho mỗi nhóm giá trị

  2. Sử dụng một cái gì đó như TOP với GROUP BY

  3. Vấn đề ràng buộc PostgreSQL

  4. Làm cách nào để thực hiện các truy vấn khi kết nối DB trong Rails?

  5. org.hibernate.MappingException:Không có ánh xạ phương ngữ cho loại JDBC:1111