Postgres:在JSONB列中创建属性属性索引?

时间:2017-11-15 21:59:22

标签: postgresql

我在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.

我做错了什么?

2 个答案:

答案 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}'));