Re: Supporting = operator in gin/gist_trgm_ops
Julien Rouhaud <rjuju123@gmail.com>
From: Julien Rouhaud <rjuju123@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2020-10-26T04:02:46Z
Lists: pgsql-hackers
Attachments
- v1-0001-Fix-typo-in-1.4-1.5-pg_trm-upgrade-script.patch (text/x-patch) patch v1-0001
- v1-0002-Handle-operator-in-pg_trgm.patch (text/x-patch) patch v1-0002
On Mon, Oct 26, 2020 at 5:03 AM Tom Lane <tgl@sss.pgh.pa.us> wrote: > > Julien Rouhaud <rjuju123@gmail.com> writes: > > A french user recently complained that with an index created using > > gin_trgm_ops (or gist_trgm_ops), you can use the index with a clause > > like > > col LIKE 'something' > > but not > > col = 'something' > > Huh, I'd supposed we did that already. > > > even though both clauses are technically identical. That's clearly > > not a high priority thing to support, but looking at the code it seems > > to me that this could be achieved quite simply: just adding a new > > operator = in the opclass, with an operator strategy number that falls > > back doing exactly what LikeStrategyNumber is doing and that's it. > > There shouldn't be any wrong results, even using wildcards as the > > recheck will remove any incorrect one. > > I think you may be overoptimistic about being able to use the identical > code path without regard for LIKE wildcards; but certainly it should be > possible to do this with not a lot of new code. +1. Well, that's what I was thinking too, but I tried all the possible wildcard combinations I could think of and I couldn't find any case yielding wrong results. As far as I can see the index scans return at least all the required rows, and all extraneous rows are correctly removed either by heap recheck or index recheck. I'm attaching a patch POC pach with regression tests covering those combinations. I also found a typo in the 1.4--1.5 pg_trgm upgrade script, so I'm also attaching a patch for that.
Commits
-
Reword 'simple comparison' => 'inequality' in pgtrgm.sgml
- 7adb8feb0f69 14.0 landed
-
Add missing 'the' to pgtrgm.sgml
- b7edb5d96e7c 14.0 landed
-
Handle equality operator in contrib/pg_trgm
- 935f66665022 14.0 landed