programing

새 Postgre 내의 필드를 사용하여 쿼리하려면 어떻게 해야 합니까?SQL JSON 데이터형?

lastmoon 2023. 3. 18. 09:17
반응형

새 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"

공식 개발 매뉴얼은 매우 희박합니다.

업데이트 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"을 추가하기 위한 새로운 기능 및 연산자 무기고를 제공합니다.

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은 이들 중 가장 강력한 인덱스입니다.

이 매뉴얼은 다음과 같은 내용까지 제시하고 있습니다.

일반적으로 대부분의 응용 프로그램에서는 객체 키 순서에 관한 레거시 전제 조건 등 특별한 요구가 없는 한 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

반응형