PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wypełnij wiele tabel z jednego obiektu JSON za pomocą json_populate_recordset

3 kroki:

  1. Pole dostępu obiektu JSON, które json_populate_recordset() .
  2. Dekomponuj typ wiersza dla INSERT polecenie.

Aby ponownie użyć wartości wejściowej dla wszystkich tabel, umieść ją w CTE modyfikacji danych :

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
;

Skrzypce SQL.

Używanie niejawnego JOIN LATERAL . Powiązane:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql ILIKE kontra TSEARCH

  2. Uzyskiwanie rozmiaru lobject w PostgreSQL

  3. Używanie CASE w PostgreSQL do jednoczesnego wpływania na wiele kolumn

  4. Automatyczne przełączanie awaryjne bazy danych Moodle PostgreSQL

  5. Przygotowane oświadczenia już istnieją