sql >> データベース >  >> RDS >> PostgreSQL

json_populate_recordsetを使用して単一のJSONオブジェクトから複数のテーブルにデータを入力します

    3つのステップ:

    1. JSONオブジェクトのアクセスフィールド ->
    2. 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フィドル。

    暗黙的なJOIN LATERALの使用 。関連:




    1. utf8を使用するかどうか-MySQLおよびPHPの文字エンコードの問題

    2. PostgreSQLで名前付きウィンドウパーティション(エイリアス)を作成するにはどうすればよいですか?

    3. PostgreSQLでYで構成される各Xの比率を見つけますか?

    4. SQLServerの命名規則または命名規則に従ってすべてのデフォルト制約の名前を変更する方法-SQLServer/TSQLチュートリアルパート93