1. ホーム
  2. json

[解決済み] PostgreSQLのネストされたJSONクエリ

2023-07-01 23:16:26

質問

PostgreSQL 9.3.4 で、"person" という JSON 型の列があり、そこに格納されているデータは以下のようなフォーマットになっています。 {dogs: [{breed: <>, name: <>}, {breed: <>, name: <>}]} . 私は、インデックス0にある犬の品種を取得したいのです。以下は、私が実行した2つのクエリです。

動作しない

db=> select person->'dogs'->>0->'breed' from people where id = 77;
ERROR:  operator does not exist: text -> unknown
LINE 1: select person->'dogs'->>0->'bree...
                                 ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

作品紹介

select (person->'dogs'->>0)::json->'breed' from es_config_app_solutiondraft where id = 77;
 ?column?
-----------
 "westie"
(1 row)

なぜ型キャストが必要なのでしょうか? 非効率ではないでしょうか? 私が何か間違ったことをしているのか、それともpostgresのJSONサポートにこれが必要なのでしょうか?

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

これは、演算子 ->> はJSON配列の要素をテキストとして取得するからです。その結果をJSONに戻すにはキャストが必要です。

この冗長なキャストをなくすには、演算子 -> :

select person->'dogs'->0->'breed' from people where id = 77;