Track collation versions for indexes.

Thomas Munro <tmunro@postgresql.org>

Commit: 257836a75585934cc05ed7a80bccf8190d41e056
Author: Thomas Munro <tmunro@postgresql.org>
Date: 2020-11-02T12:19:50Z
Releases: 14.0
Track collation versions for indexes.

Record the current version of dependent collations in pg_depend when
creating or rebuilding an index.  When accessing the index later, warn
that the index may be corrupted if the current version doesn't match.

Thanks to Douglas Doole, Peter Eisentraut, Christoph Berg, Laurenz Albe,
Michael Paquier, Robert Haas, Tom Lane and others for very helpful
discussion.

Author: Thomas Munro <thomas.munro@gmail.com>
Author: Julien Rouhaud <rjuju123@gmail.com>
Reviewed-by: Peter Eisentraut <peter.eisentraut@2ndquadrant.com> (earlier versions)
Discussion: https://postgr.es/m/CAEepm%3D0uEQCpfq_%2BLYFBdArCe4Ot98t1aR4eYiYTe%3DyavQygiQ%40mail.gmail.com

Files

PathChange+/−
doc/src/sgml/catalogs.sgml modified +2 −1
doc/src/sgml/charset.sgml modified +38 −0
doc/src/sgml/func.sgml modified +3 −1
doc/src/sgml/ref/alter_index.sgml modified +15 −0
doc/src/sgml/ref/pgupgrade.sgml modified +15 −0
doc/src/sgml/ref/reindex.sgml modified +9 −0
src/backend/catalog/dependency.c modified +155 −27
src/backend/catalog/heap.c modified +4 −3
src/backend/catalog/index.c modified +183 −14
src/backend/catalog/pg_constraint.c modified +1 −1
src/backend/catalog/pg_depend.c modified +40 −6
src/backend/catalog/pg_type.c modified +60 −0
src/backend/commands/collationcmds.c modified +1 −15
src/backend/commands/tablecmds.c modified +31 −0
src/backend/nodes/copyfuncs.c modified +1 −0
src/backend/optimizer/util/plancat.c modified +9 −0
src/backend/parser/gram.y modified +8 −0
src/backend/utils/adt/pg_locale.c modified +45 −1
src/backend/utils/adt/pg_upgrade_support.c modified +1 −0
src/backend/utils/cache/relcache.c modified +2 −0
src/bin/pg_dump/pg_backup.h modified +1 −0
src/bin/pg_dump/pg_dump.c modified +174 −8
src/bin/pg_dump/pg_dump.h modified +2 −0
src/bin/pg_upgrade/dump.c modified +3 −1
src/bin/pg_upgrade/option.c modified +7 −0
src/bin/pg_upgrade/pg_upgrade.h modified +1 −0
src/bin/psql/tab-complete.c modified +27 −2
src/include/catalog/catversion.h modified +1 −1
src/include/catalog/dependency.h modified +19 −6
src/include/catalog/index.h modified +3 −0
src/include/catalog/pg_depend.h modified +1 −2
src/include/catalog/pg_type.h modified +2 −0
src/include/nodes/parsenodes.h modified +3 −1
src/include/utils/pg_locale.h modified +1 −1
src/include/utils/rel.h modified +1 −0
src/test/locale/.gitignore modified +1 −0
src/test/locale/Makefile modified +7 −0
src/test/locale/t/001_index.pl added +67 −0
src/test/Makefile modified +2 −1
src/test/regress/expected/collate.icu.utf8.out modified +201 −0
src/test/regress/expected/create_index.out modified +6 −2
src/test/regress/sql/collate.icu.utf8.sql modified +132 −0
src/tools/pgindent/typedefs.list modified +2 −0

Documentation touched

Discussion