PostgreSQL中的#>和->>运算符有什么区别?

Mac*_* Sz 3 postgresql json postgresql-9.3

我们可以使用->->>运算符访问PostgreSQL 9.3中的任何JSON元素。在我看来,#>#>>仅提供编写JSON路径的较短形式。还是在#>操作员后面有更大的前景?它是否有特殊目的/相对于箭头符号提供了任何优势?首选的写路径方法是哪一种?

这一切都在问:为什么我应该使用#>#>>运营商在->->>

该文档对此有点神秘。

下面的两个查询给出相同的结果:

=> 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
Run Code Online (Sandbox Code Playgroud)

Cra*_*ger 5

考虑嵌套。

{
  "a" : {
    "b" : {
      "c" : 1,
      "d" : 2
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

想象一下,您有一个json文档,并且您事先不知道它将如何嵌套。如果知道需要三级路径,则可以编写:

SELECT '{
  "a" : {
    "b" : {
      "c" : 1,
      "d" : 2
    }
  }
}'::json -> 'a' -> 'b' -> 'c';
Run Code Online (Sandbox Code Playgroud)

但是,如果您想编写一个事先不知道的查询该怎么办?这就是基于路径的运算符有用的地方。路径可以与文档一起提供,并且查询中不再有关于文档结构的假设。

SELECT '{
  "a" : {
    "b" : {
      "c" : 1,
      "d" : 2
    }
  }
}'::json #>> ARRAY['a','b','c']
Run Code Online (Sandbox Code Playgroud)