为模式匹配创建运算符类,如text_pattern_ops

Dan*_*iel 9 postgresql

我创建了一个使用自然排序("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);
Run Code Online (Sandbox Code Playgroud)

然而,当我创建一个使用我的新的指数text_natsort_ops,在此不涉及查询中使用like,因为它的时所做的text_pattern_ops使用.

如何声明我的运算符类以允许like使用我的索引?

更新:

以上似乎有效,所以问题无效.我真正的问题是我使用了如下查询:

select *
  from mytable
 where number like 'edi%'
 order by number using #<#
 limit 10
Run Code Online (Sandbox Code Playgroud)

我还有另一个使用text_pattern_ops的索引,这是由计划者选择的,因为它似乎工作得更快.但是,由于order by ... using只使用我的新操作的索引将是有用的...另一个索引返回太多结果,我需要限制子句可用于索引扫描.

Dan*_*iel 2

以上似乎有效,因此该问题无效。我真正的问题是我使用了如下查询:

select *
  from mytable
 where number like 'edi%'
 order by number using #<#
 limit 10
Run Code Online (Sandbox Code Playgroud)

我还有另一个使用 text_pattern_ops 的索引,它是由规划者选择的,因为它似乎工作得更快。但是,由于 order by ... 仅使用使用我的新操作的索引将很有用...其他索引返回太多结果,并且我需要 limit 子句可用于索引扫描。