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 --- src/backend/tcop/utility.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'src/backend/tcop/utility.c') diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c index 83e4e37c78a..3780c6e812e 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -136,6 +136,7 @@ ClassifyUtilityCommandAsReadOnly(Node *parsetree) switch (nodeTag(parsetree)) { case T_AlterCollationStmt: + case T_AlterDatabaseRefreshCollStmt: case T_AlterDatabaseSetStmt: case T_AlterDatabaseStmt: case T_AlterDefaultPrivilegesStmt: @@ -779,6 +780,11 @@ standard_ProcessUtility(PlannedStmt *pstmt, AlterDatabase(pstate, (AlterDatabaseStmt *) parsetree, isTopLevel); break; + case T_AlterDatabaseRefreshCollStmt: + /* no event triggers for global objects */ + AlterDatabaseRefreshColl((AlterDatabaseRefreshCollStmt *) parsetree); + break; + case T_AlterDatabaseSetStmt: /* no event triggers for global objects */ AlterDatabaseSet((AlterDatabaseSetStmt *) parsetree); @@ -2801,9 +2807,7 @@ CreateCommandTag(Node *parsetree) break; case T_AlterDatabaseStmt: - tag = CMDTAG_ALTER_DATABASE; - break; - + case T_AlterDatabaseRefreshCollStmt: case T_AlterDatabaseSetStmt: tag = CMDTAG_ALTER_DATABASE; break; @@ -3444,9 +3448,7 @@ GetCommandLogLevel(Node *parsetree) break; case T_AlterDatabaseStmt: - lev = LOGSTMT_DDL; - break; - + case T_AlterDatabaseRefreshCollStmt: case T_AlterDatabaseSetStmt: lev = LOGSTMT_DDL; break; -- cgit v1.2.3