我在使用自然排序('1' < '2' < '10' < '11' 等)的文本数据类型上创建了自己的比较运算符,使用我的新运算符#<#
、和。#<=#
#>#
#>=#
现在我将它们放入一个运算符类中,以便能够在它们上创建索引,如下所示:
CREATE OPERATOR CLASS text_natsort_ops
FOR TYPE text USING btree AS
OPERATOR 1 #<#,
OPERATOR 2 #<=#,
OPERATOR 3 =,
OPERATOR 4 #>=#,
OPERATOR 5 #>#,
FUNCTION 1 bttext_natsort_cmp(text, text);
但是,当我使用我的 new 创建索引时text_natsort_ops
,这不会在涉及的查询中使用,like
因为它在text_pattern_ops
使用时完成。
如何声明我的运算符类以允许like
使用我的索引?
更新:
以上似乎有效,因此问题无效。我真正的问题是我使用了如下查询:
select *
from mytable
where number like 'edi%'
order by number using #<#
limit 10
而且我还有另一个使用 text_pattern_ops 的索引,它是由计划者选择的,因为它似乎工作得更快。但是,因为order by ... using
只有使用我的新操作的索引才有用......另一个索引返回太多结果,我需要限制子句可用于索引扫描。