Re: Collation versioning
Thomas Munro <thomas.munro@gmail.com>
From: Thomas Munro <thomas.munro@gmail.com>
To: Julien Rouhaud <rjuju123@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-10-29T12:20:28Z
Lists: pgsql-hackers
Attachments
- v33-0001-Remove-pg_collation.collversion.patch (text/x-patch) patch v33-0001
- v33-0002-Add-pg_depend.refobjversion.patch (text/x-patch) patch v33-0002
- v33-0003-Track-collation-versions-for-indexes.patch (text/x-patch) patch v33-0003
On Tue, Oct 27, 2020 at 1:34 AM Julien Rouhaud <rjuju123@gmail.com> wrote: > On Sun, Oct 25, 2020 at 7:13 PM Julien Rouhaud <rjuju123@gmail.com> wrote: > > I didn't review all the changes yet, so I'll probably post a deeper > > review tomorrow. I'm not opposed to this new approach, as it indeed > > saves a lot of code. However, looking at > > do_collation_version_check(), it seems that you're saving the > > collation in context->checked_calls even if it didn't raise a WARNING. > > Since you can now have indexes with dependencies on a same collation > > with both version tracked and untracked (see for instance > > icuidx00_val_pattern_where in the regression tests), can't this hide > > corruption warning reports if the untracked version is found first? > > That can be easily fixed, so no objection to that approach of course. Right, fixed. > I finish looking at the rest of the patches. I don't have much to > say, it all looks good and I quite like how much useless code you got > rid of! Thanks! I tested a bunch of permutations[1] of cross-version pg_update, with and without ICU, with and without libc version support, and fixed some problems I found in pg_dump: 1. We need to print OIDs as %u, not %d. Also, let's use '%u'::pg_catalog.oid to be consistent with nearby things. 2. We dump binary_upgrade_set_index_coll_version(<index>, NULL, ...) to blow away the new cluster's versions before we import the old versions. OK, but the function was marked STRICT... 3. We dump binary_upgrade_set_index_coll_version(<index>, <collation>, <version>), to import the old cluster's version, where <collation> is an OID. OK, but we need the new cluster's OID, not the old one, so it needs to be an expression like 'pg_catalog."fr_FR"'::regcollation (compare the other references to collations in the dump, which are all by name). 4. I didn't really like the use of '' for unknown. I figured out how to use NULL for that. [1] https://github.com/macdice/some_pg_upgrade_tests
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