首页 > 解决方案 > 在 Postgres 10 中的 jsonb 上创建 btree 索引时如何指定 bigint 数据类型

问题描述

我有一个字段 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。

可能吗?

标签: postgresqlindexingjsonb

解决方案


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

通常你会像这样转换 json: (json_value->>key)::bigint,否则你会把你的key转换成 bigint ,它会抛出错误。

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

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

推荐阅读