LINUX.ORG.RU

История изменений

Исправление Toxo2, (текущая версия) :

Если бы мне в одном предложении встретились слова «рекурсивно» и «таблица» - то первое, что пришло в голову было бы какое-то такое:

WITH RECURSIVE c_j AS (
  SELECT
    1 AS rn, ARRAY[p."key"] AS pk, p.value AS pv
  FROM
    json_each(pg_read_file('/tmp/package.json')::json) p
  UNION ALL
  SELECT
    cj.rn + 1, array_append(pk, ch."key"), ch.value
  FROM
    c_j cj
    LEFT JOIN json_each(CASE WHEN json_typeof(cj.pv) = 'object' THEN cj.pv END) ch ON TRUE
  WHERE
    json_typeof(cj.pv) = 'object'
)
SELECT * FROM c_j cj WHERE json_typeof(cj.pv) != 'object';

|rn |pk                                 |pv                    |
|---|-----------------------------------|----------------------|
|1  |{private}                          |"true"                |
|1  |{workspaces}                       |["packages/*"]        |
|1  |{packageManager}                   |"yarn@1.22.22"        |
|2  |{devDependencies,@babel/cli}       |"^7.10.5"             |
|2  |{devDependencies,@babel/code-frame}|"^7.10.4"             |
...
А вообще, в жизни чаще попадаются задачки наоборот - слепить (в т.ч. рекурсивно по связями родитель/ребенок на саму себя) таблицы в json.

Nushell умеет в какое-нибудь json_agg сам? Или хотя бы с плагинами Dataframe?

Исходная версия Toxo2, :

Если бы мне в одном предложении встретились слова «рекурсивно» и «таблица» - то первое, что пришло в голову было бы какое-то такое:

WITH RECURSIVE c_j AS (
  SELECT
    1 AS rn, ARRAY[p."key"] AS pk, p.value AS pv
  FROM
    json_each(pg_read_file('/tmp/package.json')::json) p
  UNION ALL
  SELECT
    cj.rn + 1, array_append(pk, ch."key"), ch.value
  FROM
    c_j cj
    LEFT JOIN json_each(CASE WHEN json_typeof(cj.pv) = 'object' THEN cj.pv END) ch ON TRUE
  WHERE
    json_typeof(cj.pv) = 'object'
)
SELECT * FROM c_j cj WHERE json_typeof(cj.pv) != 'object';

|rn |pk                                 |pv                    |
|---|-----------------------------------|----------------------|
|1  |{private}                          |"true"                |
|1  |{workspaces}                       |["packages/*"]        |
|1  |{packageManager}                   |"yarn@1.22.22"        |
|2  |{devDependencies,@babel/cli}       |"^7.10.5"             |
|2  |{devDependencies,@babel/code-frame}|"^7.10.4"             |
...
А вообще, в жизни чаще попадаются задачки наоборот - слепить (в т.ч. рекурсивно по связями родитель/ребенок) таблицы в json.

Nushell умеет в какое-нибудь json_agg сам? Или хотя бы с плагинами Dataframe?