web-dev-qa-db-ja.com

ネストされたJSON配列をテーブルに挿入する方法は?

別のJSON配列(配列の配列)からのJSON配列をjson_populate_recordset()を使用してテーブルに挿入しようとしていますが、次のエラーが発生します。

SQL Error [22023]: ERROR: argument of json_populate_recordset must be an array of objects

これが私がやろうとしていることの例です:

DO $$
DECLARE 
    j json;
BEGIN
    j := '[[{"a":1,"b":1.23},{"a":2,"b":2.34}],
           [{"a":2,"b":1.23},{"a":3,"b":2.34}],
           [{"a":3,"b":1.23},{"a":4,"b":2.34}]]'::json;

    CREATE TEMPORARY TABLE testj (j json);

    INSERT INTO testj
    SELECT * FROM json_populate_recordset(null::testj, j);

    DROP TABLE testj;
END
$$;

ファイナルテーブルは次のようになります。

                 j                  |
------------------------------------|
[{"a":1,"b":1.23},{"a":2,"b":2.34}] |
[{"a":1,"b":1.23},{"a":2,"b":2.34}] |
[{"a":1,"b":1.23},{"a":2,"b":2.34}] |

PostgreSQL 9.5データベースを使用しています。何が悪いのですか?

2
Pedro Corso

代わりにPostgres 9.5で利用可能な関数json_array_elements()を使用してください。
マニュアルの引用 、それ...

JSON配列をJSON値のセットに展開します。

また、値はJSON配列(またはその他のJSON値)にすることができます。

INSERT INTO testj (j)
SELECT * FROM json_array_elements(j);
0