1. ホーム
  2. arrays

[解決済み] Postgresでjson配列を行に変換する方法

2022-12-18 05:52:01

質問

Postgresのデータベースにjson配列が保存されています。 jsonは次のようなものです。

[
    {
        "operation": "U",
        "taxCode": "1000",
        "description": "iva description",
        "tax": "12"
    },
    {
        "operation": "U",
        "taxCode": "1001",
        "description": "iva description",
        "tax": "12"
    },
    {
        "operation": "U",
        "taxCode": "1002",
        "description": "iva description",
        "tax": "12"
    }
]

ここで、私は SELECT を作成し、クエリ結果の異なる行に要素を配置する必要があります。そのため SELECT ステートメントを実行すると、このようにデータを返す必要があります。

 data
--------------------------------------------------------------------------------------
{ "operation": "U", "taxCode": "1000", "description": "iva description", "tax":"12"}
{ "operation": "U", "taxCode": "1001", "description": "iva description", "tax":"12"}
{ "operation": "U", "taxCode": "1002", "description": "iva description", "tax":"12"}

を使ってみました。 unnest() 機能

SELECT unnest(json_data::json)
FROM my_table

を指定しても jsonb という型を受け付けません。

どのように解決するのですか?

pozsさんが書かれた回答をコメント欄に載せています。

unnest() はPostgreSQLの配列型に対するものです。

代わりに、以下の関数のいずれかを使用することができます。

  • json_array_elements(json) (9.3+)
  • jsonb_array_elements(jsonb) (9.4+)
  • json[b]_array_elements_text(json[b]) (9.4+)

:

select * from json_array_elements('[1,true, [2,false]]')

出力値

 -------------
 | 1         |
 -------------
 | true      |
 -------------
 | [2,false] |
 -------------

ここで で、v9.4 のドキュメントを見ることができます。