在Postgres 10中在jsonb上创建btree索引时如何指定bigint数据类型

时间:2018-07-30 04:27:30

标签: postgresql indexing jsonb

我有一个字段time_in_seconds的jsonb列。 针对该表的大多数查询都将要求使用time_in_seconds(首先是最大值)对结果集进行排序。

如果我只是做

create index t_mytable_timeinseconds__idx ON t_mytable using btree ((mycolumn->>'time_in_seconds'));

Postgres创建一个字母数字索引(不会导致正确的排序顺序)。

但是我似乎无法弄清楚如何指示postgres将值按降序视为bigint。

有可能吗?

1 个答案:

答案 0 :(得分:1)

您可以在索引中使用强制转换。

通常,您会像这样(json_value->>key)::bigint投射json,否则将key转换为bigint并抛出错误。

所以这给出了三组括号-一组用于索引,第二组用于索引表达式,第三组用于强制转换。

create index t_mytable_timeinseconds__idx
ON t_mytable
using btree ( ( (mycolumn->>'time_in_seconds')::bigint ) );