Re: Collation versioning
Julien Rouhaud <rjuju123@gmail.com>
From: Julien Rouhaud <rjuju123@gmail.com>
To: Thomas Munro <thomas.munro@gmail.com>
Cc: Peter Eisentraut <peter.eisentraut@2ndquadrant.com>, Michael Paquier <michael@paquier.xyz>, Robert Haas <robertmhaas@gmail.com>, Laurenz Albe <laurenz.albe@cybertec.at>, Douglas Doole <dougdoole@gmail.com>, Christoph Berg <myon@debian.org>, Pg Hackers <pgsql-hackers@postgresql.org>
Date: 2020-09-24T09:48:55Z
Lists: pgsql-hackers
Attachments
On Sun, Sep 20, 2020 at 10:24:26AM +0800, Julien Rouhaud wrote: > > On the other hand the *_pattern_ops are entirely hardcoded, and I > don't think that we'll ever have an extensible way to have this kind > of magic exception. So maybe having a flag at the am level is > acceptable? Hearing no complaint, I kept the flag at the AM level and added hardcoded exceptions for the *_pattern_ops opclasses to avoid false positive as much as possible, and no false negative (at least that I'm aware of). I added many indexes to the regression tests to make sure that all the cases are correctly handled. Unfortunately, there's still one case that can't be fixed easily. Here's an example of such case: CREATE INDEX ON sometable ((collatable_col || collatable_col) text_pattern_ops) In this case when iterating over the key columns, the current patch notices that a dependency on the collation should be added but that the version shouldn't be tracked, as it's text_pattern_ops. But then the expression itself is processed, and it also see that a dependency on the collation should be addedd. However, it has no way to know that it should not update the previously recorded dependency to start tracking the version, as the expression could really depends on a stable order. So we end up with a single dependency (which is what we want I think), but which will report false positive warning in case of collation lib update. v30 attached.
Commits
-
Doc: Document known problem with Windows collation versions.
- 1bf946bd43e5 14.0 landed
-
Add collation versions for FreeBSD.
- ca051d8b101d 14.0 landed
-
Tolerate version lookup failure for old style Windows locale names.
- 9f12a3b95dd5 14.0 landed
-
Track collation versions for indexes.
- 257836a75585 14.0 landed
-
Add pg_depend.refobjversion.
- cd6f479e79f3 14.0 landed
-
Remove pg_collation.collversion.
- 7d1297df0830 14.0 landed
-
Fix the MSVC build for versions 2015 and later.
- a169155453e3 13.0 cited
-
Add collation versions for Windows.
- 352f6f2df60f 13.0 cited
-
Implement type regcollation
- a2b1faa0f279 13.0 landed
-
Use libc version as a collation version on glibc systems.
- d5ac14f9ccdd 13.0 landed
- 9f90b1d08d79 13.0 landed
-
Make type "name" collation-aware.
- 586b98fdf1aa 12.0 cited