在 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 ) );
我有一个包含字段 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 ) );