저는 JSON/JSONB 데이터 타입을 처음 접했고 더 깊은 레벨에서 JSONB 요소를 선택하는 데 문제가 있습니다.더 깊은 레벨에서 PostgreSQL 중첩 JSONB를 쿼리하는 방법은 무엇입니까?
------------------------
| id | Favorite colors |
------------------------
| 1 | blue |
------------------------
| 1 | red |
------------------------
| 3 | blue |
------------------------
| 3 | red |
------------------------
| 3 | green |
------------------------
: - -> '즐겨 찾기'예를 들어, >> '색상'
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을 선택하고 싶습니다 : 여기
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;
다음은 간단한 쿼리와 작동하지만 더 많은 데이터를 검색 할 때 브라우저가 충돌합니다 (최종 사용자는 웹 브라우저에서 쿼리를 사용함).
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]
이것에 대한 조언이 있으십니까?
무엇 "브라우저"당신이 언급하는? 파이어 폭스? 크롬? 그러면 해당 브라우저에서 쿼리 결과를 어떻게 표시합니까? 어떤 프로그래밍 언어를 사용하고 있습니까? 그리고 "브라우저 충돌"이란 정확히 무엇을 의미합니까? 브라우저에 표시 할 데이터가 적습니까? 브라우저의 메모리 소비량은 PostgreSQL 서버의 메모리 사용량과 아무 관련이 없습니다. 'explain (analyze, buffers) '이 당신에게 그 쿼리를 보여줄 것인가? –