2016-06-02 1 views
1

"제품"이라고하는 jsonb 열에 아래와 비슷한 jsonb 개체가 들어 있습니다. 나는 postgresql 9.5에서 같은 데이터에 대해 LIKE 문을 수행하는 방법을 알아 내려고하고있다.PostgreSQL 9.5 JSONB 중첩 배열 LIKE 문

{ 
    "name":"Some Product", 
    "variants":[ 
    { 
     "color":"blue", 
     "skus":[ 
     { 
      "uom":"each", 
      "code":"ZZWG002NCHZ-65" 
     }, 
     { 
      "uom":"case", 
      "code":"ZZWG002NCHZ-65-CASE" 
     }, 
     ] 
    } 
]} 

다음 쿼리는 완전 검색에 사용됩니다.

그러나 "시작", "끝 너비"및 "포함"과 같은 LIKE 문을 지원해야합니다. 어떻게이 일을 끝낼 수 있습니까?

예 : "ZZWG00"으로 시작하는 SKU 코드가있는 모든 제품을 반환하겠습니다.

답변

1

당신은 variantsskus (jsonb_array_elements() 사용)을 unnest한다, 그래서 당신은 sku->>'code'을 검사 할 수 :

SELECT DISTINCT p.* 
FROM 
    products p, 
    jsonb_array_elements(product->'variants') as variants(variant), 
    jsonb_array_elements(variant->'skus') as skus(sku) 
WHERE 
    sku->>'code' like 'ZZW%'; 

사용 DISTINCT 하나 product에 여러 경기의 결과로 여러 행을해야한다.

+0

여전히 색인을 활용할 수 있습니까? – jfutch

+0

아직도? 질문에 대한 색인에 대한 단어는 없습니다. 어떤 지표입니까? – klin

+0

죄송합니다 .. 사용 중입니다 .. 'USING GIN (product jsonb_path_ops); – jfutch