From 37851a8b83d3d57ca48736093b10aa5f3bc0c177 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 14 Feb 2022 08:09:04 +0100 Subject: Database-level collation version tracking This adds to database objects the same version tracking that collation objects have. There is a new pg_database column datcollversion that stores the version, a new function pg_database_collation_actual_version() to get the version from the operating system, and a new subcommand ALTER DATABASE ... REFRESH COLLATION VERSION. This was not originally added together with pg_collation.collversion, since originally version tracking was only supported for ICU, and ICU on a database-level is not currently supported. But we now have version tracking for glibc (since PG13), FreeBSD (since PG14), and Windows (since PG13), so this is useful to have now. Reviewed-by: Julien Rouhaud Discussion: https://www.postgresql.org/message-id/flat/f0ff3190-29a3-5b39-a179-fa32eee57db6%40enterprisedb.com --- doc/src/sgml/catalogs.sgml | 11 +++++++++++ doc/src/sgml/func.sgml | 18 ++++++++++++++++++ doc/src/sgml/ref/alter_collation.sgml | 3 ++- doc/src/sgml/ref/alter_database.sgml | 12 ++++++++++++ doc/src/sgml/ref/create_database.sgml | 21 +++++++++++++++++++++ 5 files changed, 64 insertions(+), 1 deletion(-) (limited to 'doc/src') diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index 879d2dbce03..5a1627a3941 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -3043,6 +3043,17 @@ SCRAM-SHA-256$<iteration count>:&l + + + datcollversion text + + + Provider-specific version of the collation. This is recorded when the + database is created and then checked when it is used, to detect + changes in the collation definition that could lead to data corruption. + + + datacl aclitem[] diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 1b064b4febf..df3cd5987b7 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -27061,6 +27061,24 @@ postgres=# SELECT * FROM pg_walfile_name_offset(pg_stop_backup()); + + + + pg_database_collation_actual_version + + pg_database_collation_actual_version ( oid ) + text + + + Returns the actual version of the database's collation as it is currently + installed in the operating system. If this is different from the + value in + pg_database.datcollversion, + then objects depending on the collation might need to be rebuilt. See + also . + + + diff --git a/doc/src/sgml/ref/alter_collation.sgml b/doc/src/sgml/ref/alter_collation.sgml index 892c4665655..a8c831d7286 100644 --- a/doc/src/sgml/ref/alter_collation.sgml +++ b/doc/src/sgml/ref/alter_collation.sgml @@ -151,7 +151,8 @@ HINT: Rebuild all objects affected by this collation and run ALTER COLLATION pg - Currently, there is no version tracking for the database default collation. + For the database default collation, there is an analogous command + ALTER DATABASE ... REFRESH COLLATION VERSION. diff --git a/doc/src/sgml/ref/alter_database.sgml b/doc/src/sgml/ref/alter_database.sgml index 81e37536a3f..89ed261b4c2 100644 --- a/doc/src/sgml/ref/alter_database.sgml +++ b/doc/src/sgml/ref/alter_database.sgml @@ -35,6 +35,8 @@ ALTER DATABASE name OWNER TO { name SET TABLESPACE new_tablespace +ALTER DATABASE name REFRESH COLLATION VERSION + ALTER DATABASE name SET configuration_parameter { TO | = } { value | DEFAULT } ALTER DATABASE name SET configuration_parameter FROM CURRENT ALTER DATABASE name RESET configuration_parameter @@ -171,6 +173,16 @@ ALTER DATABASE name RESET ALL + + REFRESH COLLATION VERSION + + + Update the database collation version. See for background. + + + + configuration_parameter value diff --git a/doc/src/sgml/ref/create_database.sgml b/doc/src/sgml/ref/create_database.sgml index f22e28dc81b..f70d0c75b4d 100644 --- a/doc/src/sgml/ref/create_database.sgml +++ b/doc/src/sgml/ref/create_database.sgml @@ -28,6 +28,7 @@ CREATE DATABASE name [ LOCALE [=] locale ] [ LC_COLLATE [=] lc_collate ] [ LC_CTYPE [=] lc_ctype ] + [ COLLATION_VERSION = collation_version ] [ TABLESPACE [=] tablespace_name ] [ ALLOW_CONNECTIONS [=] allowconn ] [ CONNECTION LIMIT [=] connlimit ] @@ -158,6 +159,26 @@ CREATE DATABASE name + + + collation_version + + + + Specifies the collation version string to store with the database. + Normally, this should be omitted, which will cause the version to be + computed from the actual version of the database collation as provided + by the operating system. This option is intended to be used by + pg_upgrade for copying the version from an existing + installation. + + + + See also for how to handle + database collation version mismatches. + + + tablespace_name -- cgit v1.2.3