새 Postgre 내의 필드를 사용하여 쿼리하려면 어떻게 해야 합니까?SQL JSON 데이터형?
Postgre의 새로운 JSON 기능에 대한 문서 및/또는 예를 찾고 있습니다.SQL 9.2.
구체적으로는 일련의 JSON 레코드가 있는 경우:
[
{name: "Toby", occupation: "Software Engineer"},
{name: "Zaphod", occupation: "Galactic President"}
]
이름으로 레코드를 검색하려면 SQL을 어떻게 작성해야 합니까?
vanilla SQL의 경우:
SELECT * from json_data WHERE "name" = "Toby"
공식 개발 매뉴얼은 매우 희박합니다.
- http://www.postgresql.org/docs/devel/static/datatype-json.html
- http://www.postgresql.org/docs/devel/static/functions-json.html
업데이트 I
현재 Postgre와 함께 할 수 있는 일이 무엇인지에 대한 세부 사항을 정리했습니다.SQL 9.2.몇 가지 커스텀 기능을 사용하여 다음과 같은 작업을 수행할 수 있습니다.
SELECT id, json_string(data,'name') FROM things
WHERE json_string(data,'name') LIKE 'G%';
업데이트 II
이제 JSON 기능을 자체 프로젝트로 이동했습니다.
포스트 SQL - Postgre를 변환하기 위한 함수 세트SQL과 PL/v8을 완벽한 JSON 문서 저장소로 활용
포스트그레스 9.2
pgsql-hackers 목록에 Andrew Dunstan을 인용합니다.
어떤 단계에서는 json-processing(json-producting이 아닌) 기능이 있을 수 있지만, 9.2에서는 그렇지 않습니다.
PLV8에서 고객의 문제를 해결할 수 있는 구현 예를 제공하는 데 방해가 되지 않습니다.(Link는 정지되어 있습니다.대신 최신 PLV8을 참조해 주세요.)
포스트그레스 9.3
"json-processing"을 추가하기 위한 새로운 기능 및 연산자 무기고를 제공합니다.
- 새로운 JSON 기능에 관한 매뉴얼.
- 9.3페이지의 신기능에 관한 Postgres Wiki.
Postgres 9.3의 첫 번째 질문에 대한 답변:
SELECT *
FROM json_array_elements(
'[{"name": "Toby", "occupation": "Software Engineer"},
{"name": "Zaphod", "occupation": "Galactic President"} ]'
) AS elem
WHERE elem->>'name' = 'Toby';
고급 예:
테이블이 큰 경우 표현식 인덱스를 추가하여 성능을 향상시킬 수 있습니다.
포스트그레스 9.4
('바이너리'의 경우 b, 값은 네이티브 Postgres 유형으로 저장됨) 및 두 유형에 대해 더 많은 기능을 추가합니다.위에 언급된 표현식 색인 외에,jsonb
는 GIN, btree 및 해시 인덱스도 지원하며 GIN은 이들 중 가장 강력한 인덱스입니다.
- 의 매뉴얼과 데이터 유형 및 기능.
- 9.4페이지의 JSONB에 관한 Postgres Wiki
이 매뉴얼은 다음과 같은 내용까지 제시하고 있습니다.
일반적으로 대부분의 응용 프로그램에서는 객체 키 순서에 관한 레거시 전제 조건 등 특별한 요구가 없는 한 JSON 데이터를 로 저장하는 것을 선호합니다.
과감하게 강조해 주세요.
GIN 지수를 전반적으로 개선함으로써 퍼포먼스가 향상됩니다.
포스트그레스 9.5
jsonb
함수 및 연산자.하는 기능을 합니다.jsonb
제자리 및 전시용.
9.에서는 Postgres 9.3+를 합니다.->
, 이런 것들이 있습니다.
SELECT data->'images'->'thumbnail'->'url' AS thumb FROM instagram;
좋은 예시와 튜토리얼에 대해서는, http://clarkdave.net/2013/06/what-can-you-do-with-postgresql-and-json/ 를 참조해 주세요.
postgres 9.3에서는 오브젝트액세스에 -> 를 사용합니다.4 예
seed.discloss.discloss(시드).
se = SmartElement.new
se.data =
{
params:
[
{
type: 1,
code: 1,
value: 2012,
description: 'year of producction'
},
{
type: 1,
code: 2,
value: 30,
description: 'length'
}
]
}
se.save
레일 c
SELECT data->'params'->0 as data FROM smart_elements;
돌아온다
data
----------------------------------------------------------------------
{"type":1,"code":1,"value":2012,"description":"year of producction"}
(1 row)
계속 중첩할 수 있습니다.
SELECT data->'params'->0->'type' as data FROM smart_elements;
돌아가다
data
------
1
(1 row)
언급URL : https://stackoverflow.com/questions/10560394/how-do-i-query-using-fields-inside-the-new-postgresql-json-datatype
'programing' 카테고리의 다른 글
이 멀웨어 코드의 목적은 무엇입니까? (0) | 2023.03.18 |
---|---|
여러 워드프레스 사용자 지정 필드 값을 정렬하려면 어떻게 해야 합니까? (0) | 2023.03.18 |
Angular는 모델 값을 설정할 때 선택한 요소에 이상한 옵션을 추가합니다. (0) | 2023.03.18 |
제출 시 검증 오류 메시지를 angularjs 단위로 표시 (0) | 2023.03.18 |
워드프레스에서 true 및 false 반환 시 Ajax 함수 문제 (0) | 2023.03.18 |