2014-01-20 1 views
2

우리는 ->->> 연산자를 사용하여 PostgreSQL 9.3의 모든 JSON 요소에 액세스 할 수 있습니다. 내게 보시다시피 #>>과 함께 #>은 JSON 경로를 작성하는 간단한 형식을 제공합니다. 아니면 #> 연산자 뒤에 큰 그림이 있습니까? 특별한 목적을 지니고 있습니까/화살표 표기법보다 유리합니까? 어느 것이 경로 작성의 선호되는 방법입니까?PostgreSQL에서 #>와 -> 연산자의 차이점은 무엇입니까?

나는 모두 과 #>> 연산자를 ->->> 이상으로 사용해야합니까?

The docs은 이것에 대해 조금 수수께끼입니다.

=> select '{"a":[1,2,3],"b":[4,5,6]}'::json#>'{a,2}'; 
?column? 
---------- 
3 

=> select '{"a":[1,2,3],"b":[4,5,6]}'::json->'a'->>2; 
?column? 
---------- 
3 

답변

2

가 중첩 고려 :

두 쿼리는 다음과 같은 결과를 제공합니다.

{ 
    "a" : { 
    "b" : { 
     "c" : 1, 
     "d" : 2 
    } 
    } 
} 

당신은 JSON 문서를 가지고 상상하고는 중첩되는 방법을 사전에 알 수없는 . 3 레벨 경로가 필요하다는 것을 알고 있다면 다음과 같이 쓸 수 있습니다 :

SELECT '{ 
    "a" : { 
    "b" : { 
     "c" : 1, 
     "d" : 2 
    } 
    } 
}'::json -> 'a' -> 'b' -> 'c'; 

그러나 미리 알지 못하는 쿼리를 작성하려면 어떻게해야합니까? 경로 기반 연산자가 유용합니다. 경로는 문서와 함께 제공 될 수 있으며 더 이상 쿼리의 문서 구조에 대한 가정이 없습니다.

SELECT '{ 
    "a" : { 
    "b" : { 
     "c" : 1, 
     "d" : 2 
    } 
    } 
}'::json #>> ARRAY['a','b','c']