From: | Julien Rouhaud <rjuju123(at)gmail(dot)com> |
---|---|
To: | Robert Haas <robertmhaas(at)gmail(dot)com> |
Cc: | Michael Paquier <michael(at)paquier(dot)xyz>, Thomas Munro <thomas(dot)munro(at)gmail(dot)com>, Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at>, Peter Eisentraut <peter(dot)eisentraut(at)2ndquadrant(dot)com>, Douglas Doole <dougdoole(at)gmail(dot)com>, Christoph Berg <myon(at)debian(dot)org>, Pg Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Collation versioning |
Date: | 2019-12-11 13:44:52 |
Message-ID: | CAOBaU_ap+4uEgZV548NEgxzLTfqVsTdSy0+9S9wp32qYvXo2BA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Fri, Dec 6, 2019 at 10:29 AM Julien Rouhaud <rjuju123(at)gmail(dot)com> wrote:
>
>
> I'm attaching v4 versions, rebased and with the following modifications:
>
> - I implemented the ALTER INDEX name DEPENDS ON [ ANY COLLATION |
> COLLATION name ] [ UNKNOWN VERSION | VERSION blah ] syntax. Both are
> still only allowed in binary upgrade mode, so I didn't add
> documentation for those, or psql tab completion.
> - Those commands now requires the collation name rather than oid.
> This will be helpful if we want to make the commands above available
> for users, or some similar commands like marking an index depending on
> the current version for some specific collation
> - added the type regcollation to ease pg_dump work
> - unknown collation version is handled with a recorded empty string,
> and lead to a slightly different message
> - new "--collation-binary-compatible" documented option for
> pg_upgrade, leading to using a new and undocumented
> "--unknown-collations-binary-compatible" option for pg_dump. The new
> option in pg_dump only works in binary upgrade mode, and only prevents
> outputting the ALTER INDEX ... UNKNOWN VERSION commands. Known
> existing versions are always preserved.
> - dependencies for composite and other exotic types for regular index
> columns should now be correctly handled
> - dependencies for index expression and predicate will now track
> default collation, with additional support for composite types
> - to do so, I had to handle the collation version retrieval in
> recordMultipleDependencies() using a new "track_version" bool
> parameter, passed around in some functions. This seemed the best way
> to do so, as this is the common point in
> recordDependencyOnSingleRelExpr(), index_create() and others.
>
> The spurious messages when issuing a REINDEX is still not fixed. I'm
> also attaching an sql file that I used to check all cases of
> non-trivial collation dependencies I could think of.
Hearing no objection in [1], attached v5 with following changes:
- fix the spurious warnings by doing the version check in
get_relation_info and vacuum_open_relation, and add a flag in
RelationData to mark the check as already being done
- change the IsCatalogRelation() check to IsSystemRelation() to also
ignore toast indexes, as those can also be safely ignored too
- add a new ALTER INDEX idxname DEPENDS ON COLLATION collname CURRENT
VERSION to let users remove the warnings for safe library upgrade.
Documentation and tab completion added
If I'm not mistaken, all issues I was aware of are now fixed.
Attachment | Content-Type | Size |
---|---|---|
0003-Track-collation-versions-for-indexes-v5.patch | application/octet-stream | 35.3 KB |
0001-Remove-pg_collation.collversion-v5.patch | application/octet-stream | 23.4 KB |
0005-Preserve-index-dependencies-on-collation-during-pg_u-v5.patch | application/octet-stream | 27.5 KB |
0002-Add-pg_depend.refobjversion-v5.patch | application/octet-stream | 10.3 KB |
0004-Implement-type-regcollation-v5.patch | application/octet-stream | 8.9 KB |
0006-Add-a-new-ALTER-INDEX-name-DEPENDS-ON-COLLATION-name-v5.patch | application/octet-stream | 8.4 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Robert Haas | 2019-12-11 14:12:49 | Re: global / super barriers (for checksums) |
Previous Message | Andrey Lepikhov | 2019-12-11 13:08:40 | Optimization of NestLoop join in the case of guaranteed empty inner subtree |