diff options
| author | Peter Eisentraut | 2022-02-14 07:09:04 +0000 |
|---|---|---|
| committer | Peter Eisentraut | 2022-02-14 07:27:26 +0000 |
| commit | 37851a8b83d3d57ca48736093b10aa5f3bc0c177 (patch) | |
| tree | 5da6f597063d9579937e80aaf66d92c50ef73029 /src/include | |
| parent | 9898c5e03c40c133a9a01d8b2b36cb7c990b30d5 (diff) | |
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 <rjuju123@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/f0ff3190-29a3-5b39-a179-fa32eee57db6%40enterprisedb.com
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/catalog/catversion.h | 2 | ||||
| -rw-r--r-- | src/include/catalog/pg_database.h | 3 | ||||
| -rw-r--r-- | src/include/catalog/pg_proc.dat | 5 | ||||
| -rw-r--r-- | src/include/commands/dbcommands.h | 1 | ||||
| -rw-r--r-- | src/include/nodes/nodes.h | 1 | ||||
| -rw-r--r-- | src/include/nodes/parsenodes.h | 6 |
6 files changed, 17 insertions, 1 deletions
diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 08f9b984d7f..b940a0cf0cb 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202202101 +#define CATALOG_VERSION_NO 202202141 #endif diff --git a/src/include/catalog/pg_database.h b/src/include/catalog/pg_database.h index 90b43a4ecc9..76adbd4aade 100644 --- a/src/include/catalog/pg_database.h +++ b/src/include/catalog/pg_database.h @@ -65,6 +65,9 @@ CATALOG(pg_database,1262,DatabaseRelationId) BKI_SHARED_RELATION BKI_ROWTYPE_OID /* LC_CTYPE setting */ text datctype BKI_FORCE_NOT_NULL; + /* provider-dependent version of collation data */ + text datcollversion BKI_DEFAULT(_null_); + /* access permissions */ aclitem datacl[1]; #endif diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 62f36daa981..7f1ee97f55c 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -11627,6 +11627,11 @@ proname => 'pg_collation_actual_version', procost => '100', provolatile => 'v', prorettype => 'text', proargtypes => 'oid', prosrc => 'pg_collation_actual_version' }, +{ oid => '9167', + descr => 'get actual version of database collation from operating system', + proname => 'pg_database_collation_actual_version', procost => '100', + provolatile => 'v', prorettype => 'text', proargtypes => 'oid', + prosrc => 'pg_database_collation_actual_version' }, # system management/monitoring related functions { oid => '3353', descr => 'list files in the log directory', diff --git a/src/include/commands/dbcommands.h b/src/include/commands/dbcommands.h index b1e8b5eb969..c4947fa71f7 100644 --- a/src/include/commands/dbcommands.h +++ b/src/include/commands/dbcommands.h @@ -24,6 +24,7 @@ extern void dropdb(const char *dbname, bool missing_ok, bool force); extern void DropDatabase(ParseState *pstate, DropdbStmt *stmt); extern ObjectAddress RenameDatabase(const char *oldname, const char *newname); extern Oid AlterDatabase(ParseState *pstate, AlterDatabaseStmt *stmt, bool isTopLevel); +extern ObjectAddress AlterDatabaseRefreshColl(AlterDatabaseRefreshCollStmt *stmt); extern Oid AlterDatabaseSet(AlterDatabaseSetStmt *stmt); extern ObjectAddress AlterDatabaseOwner(const char *dbname, Oid newOwnerId); diff --git a/src/include/nodes/nodes.h b/src/include/nodes/nodes.h index da35f2c2722..5d075f0c346 100644 --- a/src/include/nodes/nodes.h +++ b/src/include/nodes/nodes.h @@ -370,6 +370,7 @@ typedef enum NodeTag T_CheckPointStmt, T_CreateSchemaStmt, T_AlterDatabaseStmt, + T_AlterDatabaseRefreshCollStmt, T_AlterDatabaseSetStmt, T_AlterRoleSetStmt, T_CreateConversionStmt, diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 37fcc4c9b5a..34218b718c1 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -3308,6 +3308,12 @@ typedef struct AlterDatabaseStmt List *options; /* List of DefElem nodes */ } AlterDatabaseStmt; +typedef struct AlterDatabaseRefreshCollStmt +{ + NodeTag type; + char *dbname; +} AlterDatabaseRefreshCollStmt; + typedef struct AlterDatabaseSetStmt { NodeTag type; |
