私はJSON/JSONBデータ型が新しく、より深いレベルからJSONB要素を選択する際にいくつか問題があります。ここでPostgreSQLのネストされたJSONBをより深いレベルでクエリする方法は?
は、例えばテーブルである:
CREATE TABLE person (id integer, details jsonb);
INSERT INTO person (id, details) VALUES
("id": 1, {"favorites":{"colors":"blue", "colors":"red"}}),
("id": 2),
("id": 3, {"favorites":{"colors":"blue", "colors":"red", "colors":"green"}});
私はすべてのp.detailsを選択したい - > 'お気に入り' - >> '色'、例えば:
------------------------
| id | Favorite colors |
------------------------
| 1 | blue |
------------------------
| 1 | red |
------------------------
| 3 | blue |
------------------------
| 3 | red |
------------------------
| 3 | green |
------------------------
を次の(または類似)は、好きな色の列を空にします(jsonb_array_elementsでも試しました)。
SELECT p.id, p.details ->'favorites' ->>'colors' AS "Favorite colors"
FROM "person" p;
SELECT p.id, json_array_elements((p.details ->'favorites' ->>'colors')::json) AS "Favorite colors"
FROM "person" p;
以下は単純なクエリで動作しますが、より多くのデータを取得するとブラウザがクラッシュします(エンドユーザーはWebブラウザでクエリを使用します)。
SELECT p.id, ((json_array_elements((json_array_elements(p.details::json)::json->>'favorites')::json))::json->>'colors') AS "Favorite colors"
FROM "person" p;
ブラウザがメモリを大量に消費しているようです。 json_array_elementsを複数回呼び出すと、クエリが遅くなるという記事があります。https://www.postgresql.org/message-id/[email protected]
これに関するアドバイスはありますか?
:これはあなたが経由で結果を得ることができるよりも正しい場合
? Firefox?クロム?そして、そのブラウザのクエリの結果をどのように表示しますか?どのプログラミング言語を使用していますか?そして、「ブラウザをクラッシュさせる」ということは、正確にはどういう意味ですか?あなたのブラウザに表示するデータ量を減らそうとしましたか?ブラウザのメモリ消費量は、PostgreSQLサーバのメモリ消費量とは関係ありません。 「説明する(分析する、バッファする)」はあなたにそれらのクエリを表示しますか? –