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

how to specify bigint data type when creating btree index on jsonb in Postgres 10

我有一个包含字段 time_in_seconds 的 jsonb 列。 针对 table 的大多数查询将要求使用 time_in_seconds(最大值优先)对结果集进行排序。

如果我只是做

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

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

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

可以吗?

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

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

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

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