Обсуждение: pgsql: Track collation versions for indexes.

Поиск
Список
Период
Сортировка

pgsql: Track collation versions for indexes.

От
Thomas Munro
Дата:
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

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/257836a75585934cc05ed7a80bccf8190d41e056

Modified Files
--------------
doc/src/sgml/catalogs.sgml                     |   3 +-
doc/src/sgml/charset.sgml                      |  38 +++++
doc/src/sgml/func.sgml                         |   4 +-
doc/src/sgml/ref/alter_index.sgml              |  15 ++
doc/src/sgml/ref/pgupgrade.sgml                |  15 ++
doc/src/sgml/ref/reindex.sgml                  |   9 ++
src/backend/catalog/dependency.c               | 182 ++++++++++++++++++----
src/backend/catalog/heap.c                     |   7 +-
src/backend/catalog/index.c                    | 197 ++++++++++++++++++++++--
src/backend/catalog/pg_constraint.c            |   2 +-
src/backend/catalog/pg_depend.c                |  46 +++++-
src/backend/catalog/pg_type.c                  |  60 ++++++++
src/backend/commands/collationcmds.c           |  16 +-
src/backend/commands/tablecmds.c               |  31 ++++
src/backend/nodes/copyfuncs.c                  |   1 +
src/backend/optimizer/util/plancat.c           |   9 ++
src/backend/parser/gram.y                      |   8 +
src/backend/utils/adt/pg_locale.c              |  46 +++++-
src/backend/utils/adt/pg_upgrade_support.c     |   1 +
src/backend/utils/cache/relcache.c             |   2 +
src/bin/pg_dump/pg_backup.h                    |   1 +
src/bin/pg_dump/pg_dump.c                      | 182 +++++++++++++++++++++-
src/bin/pg_dump/pg_dump.h                      |   2 +
src/bin/pg_upgrade/dump.c                      |   4 +-
src/bin/pg_upgrade/option.c                    |   7 +
src/bin/pg_upgrade/pg_upgrade.h                |   1 +
src/bin/psql/tab-complete.c                    |  29 +++-
src/include/catalog/catversion.h               |   2 +-
src/include/catalog/dependency.h               |  25 ++-
src/include/catalog/index.h                    |   3 +
src/include/catalog/pg_depend.h                |   3 +-
src/include/catalog/pg_type.h                  |   2 +
src/include/nodes/parsenodes.h                 |   4 +-
src/include/utils/pg_locale.h                  |   2 +-
src/include/utils/rel.h                        |   1 +
src/test/Makefile                              |   3 +-
src/test/locale/.gitignore                     |   1 +
src/test/locale/Makefile                       |   7 +
src/test/locale/t/001_index.pl                 |  67 +++++++++
src/test/regress/expected/collate.icu.utf8.out | 201 +++++++++++++++++++++++++
src/test/regress/expected/create_index.out     |   8 +-
src/test/regress/sql/collate.icu.utf8.sql      | 132 ++++++++++++++++
src/tools/pgindent/typedefs.list               |   2 +
43 files changed, 1287 insertions(+), 94 deletions(-)


Re: pgsql: Track collation versions for indexes.

От
Alvaro Herrera
Дата:
On 2020-Nov-02, Thomas Munro wrote:

> Track collation versions for indexes.

> src/include/catalog/dependency.h               |  25 ++-

This was a strange change ... Is this just an inadvertent slip-up?

diff --git a/src/include/catalog/dependency.h b/src/include/catalog/dependency.h
index 3baa5e498a..901d5019cd 100644
--- a/src/include/catalog/dependency.h
+++ b/src/include/catalog/dependency.h
@@ -209,10 +223,9 @@ extern long changeDependencyFor(Oid classId, Oid objectId,
                                 Oid refClassId, Oid oldRefObjectId,
                                 Oid newRefObjectId);
 
-extern long changeDependenciesOf(Oid classId, Oid oldObjectId,
+long changeDependenciesOf(Oid classId, Oid oldObjectId,
                                  Oid newObjectId);
-
-extern long changeDependenciesOn(Oid refClassId, Oid oldRefObjectId,
+long changeDependenciesOn(Oid refClassId, Oid oldRefObjectId,
                                  Oid newRefObjectId);
 
 extern Oid    getExtensionOfObject(Oid classId, Oid objectId);

-- 
Álvaro Herrera                                http://www.twitter.com/alvherre



Re: pgsql: Track collation versions for indexes.

От
Thomas Munro
Дата:
On Tue, Jan 12, 2021 at 10:37 AM Alvaro Herrera <alvherre@alvh.no-ip.org> wrote:
> This was a strange change ... Is this just an inadvertent slip-up?

> -extern long changeDependenciesOf(Oid classId, Oid oldObjectId,
> +long changeDependenciesOf(Oid classId, Oid oldObjectId,

Huh, definitely not done on purpose.  Will fix.  Thanks.