From c4a7a392ec8f0ff7701d84768080721ff8a7782e Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 29 Nov 2019 10:04:45 +0100 Subject: [PATCH] Make allow_system_table_mods settable at run time Make allow_system_table_mods settable at run time by superusers. It was previously postmaster start only. We don't want to make system catalog DDL wide-open, but there are occasionally useful things to do like setting reloptions or statistics on a busy system table, and blocking those doesn't help anyone. Also, this enables the possibility of writing a test suite for this setting. Reviewed-by: Tom Lane Discussion: https://www.postgresql.org/message-id/flat/8b00ea5e-28a7-88ba-e848-21528b632354%402ndquadrant.com --- doc/src/sgml/config.sgml | 8 +++++--- src/backend/utils/misc/guc.c | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index d4d1fe45cc..4ec13f3311 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -9501,9 +9501,11 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir' - Allows modification of the structure of system tables. - This is used by initdb. - This parameter can only be set at server start. + Allows modification of the structure of system tables as well as + certain other risky actions on system tables. This is otherwise not + allowed even for superusers. Ill-advised use of this setting can + cause irretrievable data loss or seriously corrupt the database + system. Only superusers can change this setting. diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index ba4edde71a..5fccc9683e 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -1777,7 +1777,7 @@ static struct config_bool ConfigureNamesBool[] = }, { - {"allow_system_table_mods", PGC_POSTMASTER, DEVELOPER_OPTIONS, + {"allow_system_table_mods", PGC_SUSET, DEVELOPER_OPTIONS, gettext_noop("Allows modifications of the structure of system tables."), NULL, GUC_NOT_IN_SAMPLE