【问题标题】:how to specify bigint data type when creating btree index on jsonb in Postgres 10在 Postgres 10 中的 jsonb 上创建 btree 索引时如何指定 bigint 数据类型
【发布时间】:2018-07-30 04:27:30
【问题描述】:

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

有可能吗?

【问题讨论】:

    标签: postgresql indexing jsonb


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢。该解释还帮助我弄清楚在哪里添加 DESC 说明符。创建索引 t_mytable_timeinseconds__idx ON t_mytable 使用 btree ( ( (mycolumn->>'time_in_seconds')::bigint ) DESC );
    • 如果索引顺序与查询想要的相反,Postgres 将向后执行索引扫描 - 成本相同,因此无需这样做,但当然也不会受到伤害。
    猜你喜欢
    • 2018-06-25
    • 2018-05-29
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 2019-03-21
    • 1970-01-01
    • 2017-02-11
    相关资源
    最近更新 更多