복붙노트

[SQL] 어떻게 새로운 PostgreSQL의 JSON 데이터 형식의 내부 필드를 사용하여 쿼리 할 수 ​​있습니까?

SQL

어떻게 새로운 PostgreSQL의 JSON 데이터 형식의 내부 필드를 사용하여 쿼리 할 수 ​​있습니까?

나는 PostgreSQL을 9.2의 새로운 JSON 기능에 대한 몇 가지 문서 및 / 또는 예제를 찾고 있어요.

특히, JSON 기록의 시리즈를 제공 :

[
  {name: "Toby", occupation: "Software Engineer"},
  {name: "Zaphod", occupation: "Galactic President"}
]

어떻게 이름으로 기록을 찾을 수있는 SQL을 작성합니다?

바닐라 SQL에서 :

SELECT * from json_data WHERE "name" = "Toby"

공식 dev에 매뉴얼은 매우 희박한 :

나는 PostgreSQL을 9.2로 현재 무엇이 가능한지 자세히 설명하는 요점을 함께 넣었습니다. 일부 사용자 지정 기능을 사용하면, 같은 일을 할 수 있습니다 :

SELECT id, json_string(data,'name') FROM things
WHERE json_string(data,'name') LIKE 'G%';

지금은 자신의 프로젝트에 내 JSON 기능을 이동했습니다 :

PostgreSQL을 - 완전히 끝내 JSON 문서 저장소로 PostgreSQL의 및 PL / V8을 변환하는 함수의 집합

해결법

  1. ==============================

    1.나는를 pgsql-해커 목록에 앤드류 던스를 인용 :

    나는를 pgsql-해커 목록에 앤드류 던스를 인용 :

    당신의 문제를 해결해야 PLV8의 예제 구현을 제공에서 그를 방해하지 않습니다.

    혜택은 새로운 함수와 연산자의 무기는 "JSON 처리"를 추가 할 수 있습니다.

    포스트 그레스 9.3에서 원래의 질문에 대한 답변 :

    SELECT *
    FROM   json_array_elements(
      '[{"name": "Toby", "occupation": "Software Engineer"},
        {"name": "Zaphod", "occupation": "Galactic President"} ]'
      ) AS elem
    WHERE elem->>'name' = 'Toby';
    

    고급 예 :

    큰 테이블의 경우는 증가 성능을 표현 인덱스를 추가 할 수 있습니다 :

    추가한다 jsonb 두 유형의 또 더 많은 기능 ( "진"의 B는 기본 값 포스트 그레스 형식으로 저장된다). 식 인덱스 외에 위에서 언급에서는 jsonb 또한 진 이들 중 가장 강력한되는, 진, BTREE 해시 인덱스를 지원한다.

    설명서는 제안으로까지 간다 :

    굵게 강조 광산.

    GIN 인덱스 일반적인 개선에서 성능 혜택을 제공합니다.

    jsonb 함수와 연산자 완료. 장소 및 표시 jsonb 조작하기 위해 더 많은 기능을 추가합니다.

  2. ==============================

    2.> 운영자 - 포스트 그레스 9.3+로, 단지를 사용합니다. 예를 들어,

    > 운영자 - 포스트 그레스 9.3+로, 단지를 사용합니다. 예를 들어,

    데이터를 선택 -> '이미지'-> '미리보기'-> 'URL'인스 타 그램 FROM 엄지 손가락 AS;

    몇 가지 좋은 예와 튜토리얼 http://clarkdave.net/2013/06/what-can-you-do-with-postgresql-and-json/를 참조하십시오.

  3. ==============================

    3.포스트 그레스 9.3 사용 -> 개체 액세스합니다. 4 예

    포스트 그레스 9.3 사용 -> 개체 액세스합니다. 4 예

    seed.rb

    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)
    
  4. from https://stackoverflow.com/questions/10560394/how-do-i-query-using-fields-inside-the-new-postgresql-json-datatype by cc-by-sa and MIT license