Re: Collation versioning
Thomas Munro <thomas.munro@enterprisedb.com>
From: Thomas Munro <thomas.munro@enterprisedb.com>
To: Stephen Frost <sfrost@snowman.net>
Cc: Douglas Doole <dougdoole@gmail.com>, Peter Eisentraut <peter.eisentraut@2ndquadrant.com>,
Christoph Berg <myon@debian.org>, Pg Hackers <pgsql-hackers@postgresql.org>
Date: 2018-09-18T23:34:27Z
Lists: pgsql-hackers
On Wed, Sep 19, 2018 at 10:09 AM Stephen Frost <sfrost@snowman.net> wrote: > * Douglas Doole (dougdoole@gmail.com) wrote: > > > The CHECK constraint doesn't need to directly track that information- > > > it should have a dependency on the column in the table and that's where > > > the information would be recorded about the current collation version. > > > > Just to have fun throwing odd cases out, how would something like this be > > recorded? > > > > Database default collation: en_US > > > > CREATE TABLE t (c1 TEXT, c2 TEXT, c3 TEXT, > > CHECK (c1 COLLATE "fr_FR" BETWEEN c2 COLLATE "fr_FR" AND c3 COLLATE > > "fr_FR")); > > > > You could even be really warped and apply multiple collations on a single > > column in a single constraint. > > Once it gets to an expression and not just a simple check, I'd think > we'd record it in the expression.. Maybe I misunderstood, but I don't think it makes sense to have a collation version "on the column in the table", because (1) that fails to capture the fact that two CHECK constraints that were defined at different times might have become dependent on two different versions (you created one constraint before upgrading and the other after, now the older one is invalidated and sounds the alarm but the second one is fine), and (2) the table itself doesn't care about collation versions since heap tables are unordered; there is no particular operation on the table that would be the correct time to update the collation version on a table/column. What we're trying to track is when objects that in some way depend on the version become invalidated, so wherever we store it there's going to have to be a version recorded per dependent object at its creation time, so that's either new columns on every interested catalog table, or ... -- Thomas Munro http://www.enterprisedb.com
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