PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Попълване на множество таблици от един JSON обект с json_populate_recordset

3 стъпки:

  1. Поле за достъп на JSON обект, който -> .
  2. Създайте извлечена таблица от JSON масив от записи, като използвате json_populate_recordset() .
  3. Разграждане на типа ред за INSERT команда.

За да използвате повторно входната стойност за всички таблици, обвийте я в CTE, модифициращи данни :

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.

Използване на скрит JOIN LATERAL . Свързани:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ST_DWithin приема параметър като градус, а не метри, защо?

  2. Име на базата данни Heroku postgresql

  3. Външни ключови проблеми с Apartment gem

  4. Как да изобразя postgresql резултати в ejs с помощта на node pg?

  5. Как да получите текущата дата в PostgreSQL