我在Postgres 9.6.5工作。我有下表:
id | integer
data | jsonb
data
列中的数据是嵌套的,格式为:
{ 'identification': { 'registration_number': 'foo' }}
我想索引registration_number
,所以我可以查询它。我试过这个(基于this answer):
CREATE INDEX ON mytable((data->>'identification'->>'registration_number'));
但得到了这个:
ERROR: operator does not exist: text ->> unknown
LINE 1: CREATE INDEX ON psc((data->>'identification'->>'registration... ^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
我做错了什么?
答案 0 :(得分:1)
你想:
CREATE INDEX ON mytable((data -> 'identification' ->> 'registration_number'));
->
运算符返回密钥下的jsonb
对象,->>
运算符返回密钥下的jsonb
对象text
。两个运算符之间最显着的区别是->>
将"展开"字符串值(即从TEXT表示中删除双引号)。
报告了您看到的错误,因为data ->> 'identification'
返回text
,而后续->>
未定义text
类型。
答案 1 :(得分:1)
由于版本9.3 Postgres具有#>
和#>>
运算符。该运算符允许用户在jsonb列中指定路径(使用文本数组)以获取值。
您可以使用此运算符以更简单的方式实现目标。
CREATE INDEX ON mytable((data #>> '{identification, registration_number}'));