diff options
author | Alexander Korotkov <akorotkov@postgresql.org> | 2023-05-17 20:06:50 +0300 |
---|---|---|
committer | Alexander Korotkov <akorotkov@postgresql.org> | 2023-05-17 20:28:57 +0300 |
commit | b9a7a822723aebb16cbe7e5fb874e5124745b07e (patch) | |
tree | b80c10d23dd09aa38e2864b647477599c834edaf | |
parent | 58dc80acc5ebf12223be90db1a97dc0b31ca4e1f (diff) | |
download | postgresql-b9a7a822723aebb16cbe7e5fb874e5124745b07e.tar.gz |
Revert "Add USER SET parameter values for pg_db_role_setting"
This reverts commit 096dd80f3ccc and its fixups beecbe8e5001, afdd9f7f0e00,
529da086ba, db93e739ac61.
Catversion is bumped.
Discussion: https://postgr.es/m/d46f9265-ff3c-6743-2278-6772598233c2%40pgmasters.net
34 files changed, 51 insertions, 677 deletions
diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index 5240840552..ed32ca0349 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -3212,16 +3212,6 @@ SCRAM-SHA-256$<replaceable><iteration count></replaceable>:<replaceable>&l Defaults for run-time configuration variables </para></entry> </row> - - <row> - <entry role="catalog_table_entry"><para role="column_definition"> - <structfield>setuser</structfield> <type>bool[]</type> - </para> - <para> - Values of <link linkend="sql-alterrole-user-set"><literal>USER SET</literal></link> - flag for every setting in <structfield>setconfig</structfield> - </para></entry> - </row> </tbody> </tgroup> </table> diff --git a/doc/src/sgml/ref/alter_database.sgml b/doc/src/sgml/ref/alter_database.sgml index 5144e1f4ea..2479c41e8d 100644 --- a/doc/src/sgml/ref/alter_database.sgml +++ b/doc/src/sgml/ref/alter_database.sgml @@ -37,7 +37,7 @@ ALTER DATABASE <replaceable class="parameter">name</replaceable> SET TABLESPACE ALTER DATABASE <replaceable class="parameter">name</replaceable> REFRESH COLLATION VERSION -ALTER DATABASE <replaceable class="parameter">name</replaceable> SET <replaceable>configuration_parameter</replaceable> { TO | = } { <replaceable>value</replaceable> | <replaceable>value</replaceable> USER SET | DEFAULT } +ALTER DATABASE <replaceable class="parameter">name</replaceable> SET <replaceable>configuration_parameter</replaceable> { TO | = } { <replaceable>value</replaceable> | DEFAULT } ALTER DATABASE <replaceable class="parameter">name</replaceable> SET <replaceable>configuration_parameter</replaceable> FROM CURRENT ALTER DATABASE <replaceable class="parameter">name</replaceable> RESET <replaceable>configuration_parameter</replaceable> ALTER DATABASE <replaceable class="parameter">name</replaceable> RESET ALL @@ -206,19 +206,6 @@ ALTER DATABASE <replaceable class="parameter">name</replaceable> RESET ALL </para> </listitem> </varlistentry> - - <varlistentry> - <term><literal>USER SET</literal></term> - <listitem> - <para> - Specifies that the variable should be set on behalf of an ordinary role. - That allows non-superuser and non-replication roles to set placeholder - variables, whose permission requirements are not known yet; - see <xref linkend="runtime-config-custom"/>. The variable won't - be set if it appears to require superuser privileges. - </para> - </listitem> - </varlistentry> </variablelist> </refsect1> diff --git a/doc/src/sgml/ref/alter_role.sgml b/doc/src/sgml/ref/alter_role.sgml index ff2b88e9b6..ab1ee45d54 100644 --- a/doc/src/sgml/ref/alter_role.sgml +++ b/doc/src/sgml/ref/alter_role.sgml @@ -38,7 +38,7 @@ ALTER ROLE <replaceable class="parameter">role_specification</replaceable> [ WIT ALTER ROLE <replaceable class="parameter">name</replaceable> RENAME TO <replaceable>new_name</replaceable> -ALTER ROLE { <replaceable class="parameter">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="parameter">database_name</replaceable> ] SET <replaceable>configuration_parameter</replaceable> { TO | = } { <replaceable>value</replaceable> | <replaceable>value</replaceable> USER SET | DEFAULT } +ALTER ROLE { <replaceable class="parameter">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="parameter">database_name</replaceable> ] SET <replaceable>configuration_parameter</replaceable> { TO | = } { <replaceable>value</replaceable> | DEFAULT } ALTER ROLE { <replaceable class="parameter">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="parameter">database_name</replaceable> ] SET <replaceable>configuration_parameter</replaceable> FROM CURRENT ALTER ROLE { <replaceable class="parameter">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="parameter">database_name</replaceable> ] RESET <replaceable>configuration_parameter</replaceable> ALTER ROLE { <replaceable class="parameter">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="parameter">database_name</replaceable> ] RESET ALL @@ -239,19 +239,6 @@ ALTER ROLE { <replaceable class="parameter">role_specification</replaceable> | A </para> </listitem> </varlistentry> - - <varlistentry id="sql-alterrole-user-set"> - <term><literal>USER SET</literal></term> - <listitem> - <para> - Specifies that the variable should be set on behalf of an ordinary role. - That allows non-superuser and non-replication roles to set placeholder - variables, whose permission requirements are not known yet; - see <xref linkend="runtime-config-custom"/>. The variable won't - be set if it appears to require superuser privileges. - </para> - </listitem> - </varlistentry> </variablelist> </refsect1> @@ -348,13 +335,6 @@ ALTER ROLE worker_bee SET maintenance_work_mem = 100000; <programlisting> ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG; </programlisting></para> - - <para> - Give a role a non-default placeholder setting on behalf of ordinary user: - -<programlisting> -ALTER ROLE fred SET my.param = 'value' USER SET; -</programlisting></para> </refsect1> <refsect1 id="sql-alterrole-compat"> diff --git a/doc/src/sgml/ref/alter_user.sgml b/doc/src/sgml/ref/alter_user.sgml index 24f737d587..0ee89f54c5 100644 --- a/doc/src/sgml/ref/alter_user.sgml +++ b/doc/src/sgml/ref/alter_user.sgml @@ -38,7 +38,7 @@ ALTER USER <replaceable class="parameter">role_specification</replaceable> [ WIT ALTER USER <replaceable class="parameter">name</replaceable> RENAME TO <replaceable>new_name</replaceable> -ALTER USER { <replaceable class="parameter">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="parameter">database_name</replaceable> ] SET <replaceable>configuration_parameter</replaceable> { TO | = } { <replaceable>value</replaceable> | <replaceable>value</replaceable> USER SET | DEFAULT } +ALTER USER { <replaceable class="parameter">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="parameter">database_name</replaceable> ] SET <replaceable>configuration_parameter</replaceable> { TO | = } { <replaceable>value</replaceable> | DEFAULT } ALTER USER { <replaceable class="parameter">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="parameter">database_name</replaceable> ] SET <replaceable>configuration_parameter</replaceable> FROM CURRENT ALTER USER { <replaceable class="parameter">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="parameter">database_name</replaceable> ] RESET <replaceable>configuration_parameter</replaceable> ALTER USER { <replaceable class="parameter">role_specification</replaceable> | ALL } [ IN DATABASE <replaceable class="parameter">database_name</replaceable> ] RESET ALL diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index de760f9990..880d3d0b32 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -1902,13 +1902,6 @@ INSERT INTO tbl1 VALUES ($1, $2) \bind 'first value' 'second value' \g commands are used to define per-role and per-database configuration settings. </para> - - <para> - Since <productname>PostgreSQL</productname> 16, the output includes a - column with the values of the - <link linkend="sql-alterrole-user-set"><literal>USER SET</literal></link> - flag for each setting. - </para> </listitem> </varlistentry> diff --git a/src/backend/catalog/pg_db_role_setting.c b/src/backend/catalog/pg_db_role_setting.c index 39535e304b..2f4267fc5f 100644 --- a/src/backend/catalog/pg_db_role_setting.c +++ b/src/backend/catalog/pg_db_role_setting.c @@ -63,23 +63,14 @@ AlterSetting(Oid databaseid, Oid roleid, VariableSetStmt *setstmt) if (HeapTupleIsValid(tuple)) { ArrayType *new = NULL; - ArrayType *usersetArray; Datum datum; - Datum usersetDatum; bool isnull; - bool usersetIsnull; datum = heap_getattr(tuple, Anum_pg_db_role_setting_setconfig, RelationGetDescr(rel), &isnull); - usersetDatum = heap_getattr(tuple, Anum_pg_db_role_setting_setuser, - RelationGetDescr(rel), &usersetIsnull); if (!isnull) - { - Assert(!usersetIsnull); - usersetArray = DatumGetArrayTypeP(usersetDatum); - new = GUCArrayReset(DatumGetArrayTypeP(datum), &usersetArray); - } + new = GUCArrayReset(DatumGetArrayTypeP(datum)); if (new) { @@ -95,11 +86,6 @@ AlterSetting(Oid databaseid, Oid roleid, VariableSetStmt *setstmt) repl_repl[Anum_pg_db_role_setting_setconfig - 1] = true; repl_null[Anum_pg_db_role_setting_setconfig - 1] = false; - repl_val[Anum_pg_db_role_setting_setuser - 1] = - PointerGetDatum(usersetArray); - repl_repl[Anum_pg_db_role_setting_setuser - 1] = true; - repl_null[Anum_pg_db_role_setting_setuser - 1] = false; - newtuple = heap_modify_tuple(tuple, RelationGetDescr(rel), repl_val, repl_null, repl_repl); CatalogTupleUpdate(rel, &tuple->t_self, newtuple); @@ -115,39 +101,28 @@ AlterSetting(Oid databaseid, Oid roleid, VariableSetStmt *setstmt) bool repl_repl[Natts_pg_db_role_setting]; HeapTuple newtuple; Datum datum; - Datum usersetDatum; bool isnull; - bool usersetIsnull; ArrayType *a; - ArrayType *usersetArray; memset(repl_repl, false, sizeof(repl_repl)); repl_repl[Anum_pg_db_role_setting_setconfig - 1] = true; repl_null[Anum_pg_db_role_setting_setconfig - 1] = false; - repl_repl[Anum_pg_db_role_setting_setuser - 1] = true; - repl_null[Anum_pg_db_role_setting_setuser - 1] = false; - /* Extract old values of setconfig and setuser */ + /* Extract old value of setconfig */ datum = heap_getattr(tuple, Anum_pg_db_role_setting_setconfig, RelationGetDescr(rel), &isnull); a = isnull ? NULL : DatumGetArrayTypeP(datum); - usersetDatum = heap_getattr(tuple, Anum_pg_db_role_setting_setuser, - RelationGetDescr(rel), &usersetIsnull); - usersetArray = usersetIsnull ? NULL : DatumGetArrayTypeP(usersetDatum); - /* Update (valuestr is NULL in RESET cases) */ if (valuestr) - a = GUCArrayAdd(a, &usersetArray, setstmt->name, valuestr, setstmt->user_set); + a = GUCArrayAdd(a, setstmt->name, valuestr); else - a = GUCArrayDelete(a, &usersetArray, setstmt->name); + a = GUCArrayDelete(a, setstmt->name); if (a) { repl_val[Anum_pg_db_role_setting_setconfig - 1] = PointerGetDatum(a); - repl_val[Anum_pg_db_role_setting_setuser - 1] = - PointerGetDatum(usersetArray); newtuple = heap_modify_tuple(tuple, RelationGetDescr(rel), repl_val, repl_null, repl_repl); @@ -162,18 +137,16 @@ AlterSetting(Oid databaseid, Oid roleid, VariableSetStmt *setstmt) HeapTuple newtuple; Datum values[Natts_pg_db_role_setting]; bool nulls[Natts_pg_db_role_setting]; - ArrayType *a, - *usersetArray; + ArrayType *a; memset(nulls, false, sizeof(nulls)); - a = GUCArrayAdd(NULL, &usersetArray, setstmt->name, valuestr, setstmt->user_set); + a = GUCArrayAdd(NULL, setstmt->name, valuestr); values[Anum_pg_db_role_setting_setdatabase - 1] = ObjectIdGetDatum(databaseid); values[Anum_pg_db_role_setting_setrole - 1] = ObjectIdGetDatum(roleid); values[Anum_pg_db_role_setting_setconfig - 1] = PointerGetDatum(a); - values[Anum_pg_db_role_setting_setuser - 1] = PointerGetDatum(usersetArray); newtuple = heap_form_tuple(RelationGetDescr(rel), values, nulls); CatalogTupleInsert(rel, newtuple); @@ -267,25 +240,20 @@ ApplySetting(Snapshot snapshot, Oid databaseid, Oid roleid, while (HeapTupleIsValid(tup = systable_getnext(scan))) { bool isnull; - bool usersetIsnull; Datum datum; - Datum usersetDatum; datum = heap_getattr(tup, Anum_pg_db_role_setting_setconfig, RelationGetDescr(relsetting), &isnull); - usersetDatum = heap_getattr(tup, Anum_pg_db_role_setting_setuser, - RelationGetDescr(relsetting), &usersetIsnull); if (!isnull) { ArrayType *a = DatumGetArrayTypeP(datum); - ArrayType *usersetArray = DatumGetArrayTypeP(usersetDatum); /* * We process all the options at SUSET level. We assume that the * right to insert an option into pg_db_role_setting was checked * when it was inserted. */ - ProcessGUCArray(a, usersetArray, PGC_SUSET, source, GUC_ACTION_SET); + ProcessGUCArray(a, PGC_SUSET, source, GUC_ACTION_SET); } } diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c index 41fa2a4987..b5fd364003 100644 --- a/src/backend/catalog/pg_proc.c +++ b/src/backend/catalog/pg_proc.c @@ -696,7 +696,6 @@ ProcedureCreate(const char *procedureName, { save_nestlevel = NewGUCNestLevel(); ProcessGUCArray(set_items, - NULL, (superuser() ? PGC_SUSET : PGC_USERSET), PGC_S_SESSION, GUC_ACTION_SAVE); diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c index 69f66dfe7d..71caa3b9f3 100644 --- a/src/backend/commands/functioncmds.c +++ b/src/backend/commands/functioncmds.c @@ -662,9 +662,9 @@ update_proconfig_value(ArrayType *a, List *set_items) char *valuestr = ExtractSetVariableArgs(sstmt); if (valuestr) - a = GUCArrayAdd(a, NULL, sstmt->name, valuestr, sstmt->user_set); + a = GUCArrayAdd(a, sstmt->name, valuestr); else /* RESET */ - a = GUCArrayDelete(a, NULL, sstmt->name); + a = GUCArrayDelete(a, sstmt->name); } } diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 6f5aa8a3cb..39ab7eac0d 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -1648,26 +1648,6 @@ generic_set: n->args = $3; $$ = n; } - | var_name TO var_list USER SET - { - VariableSetStmt *n = makeNode(VariableSetStmt); - - n->kind = VAR_SET_VALUE; - n->name = $1; - n->args = $3; - n->user_set = true; - $$ = n; - } - | var_name '=' var_list USER SET - { - VariableSetStmt *n = makeNode(VariableSetStmt); - - n->kind = VAR_SET_VALUE; - n->name = $1; - n->args = $3; - n->user_set = true; - $$ = n; - } | var_name TO DEFAULT { VariableSetStmt *n = makeNode(VariableSetStmt); diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c index 87c987fb27..9000f83a83 100644 --- a/src/backend/utils/adt/arrayfuncs.c +++ b/src/backend/utils/adt/arrayfuncs.c @@ -3367,7 +3367,6 @@ construct_array_builtin(Datum *elems, int nelems, Oid elmtype) switch (elmtype) { case CHAROID: - case BOOLOID: elmlen = 1; elmbyval = true; elmalign = TYPALIGN_CHAR; diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c index f72dd25efa..7458ef5c90 100644 --- a/src/backend/utils/fmgr/fmgr.c +++ b/src/backend/utils/fmgr/fmgr.c @@ -692,7 +692,6 @@ fmgr_security_definer(PG_FUNCTION_ARGS) if (fcache->proconfig) { ProcessGUCArray(fcache->proconfig, - NULL, (superuser() ? PGC_SUSET : PGC_USERSET), PGC_S_SESSION, GUC_ACTION_SAVE); diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 53d1d9a06a..67c37c49cb 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -225,6 +225,7 @@ static bool reporting_enabled; /* true to enable GUC_REPORT */ static int GUCNestLevel = 0; /* 1 when in main transaction */ + static int guc_var_compare(const void *a, const void *b); static uint32 guc_name_hash(const void *key, Size keysize); static int guc_name_match(const void *key1, const void *key2, Size keysize); @@ -244,7 +245,7 @@ static void reapply_stacked_values(struct config_generic *variable, GucContext curscontext, GucSource cursource, Oid cursrole); static bool validate_option_array_item(const char *name, const char *value, - bool user_set, bool skipIfNoPermissions); + bool skipIfNoPermissions); static void write_auto_conf_file(int fd, const char *filename, ConfigVariable *head); static void replace_auto_config_value(ConfigVariable **head_p, ConfigVariable **tail_p, const char *name, const char *value); @@ -6197,6 +6198,7 @@ ParseLongOption(const char *string, char **name, char **value) { *name = palloc(equal_pos + 1); strlcpy(*name, string, equal_pos + 1); + *value = pstrdup(&string[equal_pos + 1]); } else @@ -6219,7 +6221,7 @@ ParseLongOption(const char *string, char **name, char **value) * The array parameter must be an array of TEXT (it must not be NULL). */ void -ProcessGUCArray(ArrayType *array, ArrayType *usersetArray, +ProcessGUCArray(ArrayType *array, GucContext context, GucSource source, GucAction action) { int i; @@ -6232,7 +6234,6 @@ ProcessGUCArray(ArrayType *array, ArrayType *usersetArray, for (i = 1; i <= ARR_DIMS(array)[0]; i++) { Datum d; - Datum userSetDatum = BoolGetDatum(false); bool isnull; char *s; char *name; @@ -6261,29 +6262,9 @@ ProcessGUCArray(ArrayType *array, ArrayType *usersetArray, continue; } - if (usersetArray) - userSetDatum = array_ref(usersetArray, 1, &i, - -1 /* varlenarray */ , - sizeof(bool) /* BOOL's typlen */ , - true /* BOOL's typbyval */ , - TYPALIGN_CHAR /* BOOL's typalign */ , - &isnull); - if (isnull) - userSetDatum = BoolGetDatum(false); - - /* - * USER SET values are applicable only for PGC_USERSET parameters. We - * use InvalidOid as role in order to evade possible privileges of the - * current user. - */ - if (!DatumGetBool(userSetDatum)) - (void) set_config_option(name, value, - context, source, - action, true, 0, false); - else - (void) set_config_option_ext(name, value, - PGC_USERSET, source, InvalidOid, - action, true, 0, false); + (void) set_config_option(name, value, + context, source, + action, true, 0, false); pfree(name); pfree(value); @@ -6297,8 +6278,7 @@ ProcessGUCArray(ArrayType *array, ArrayType *usersetArray, * to indicate the current table entry is NULL. */ ArrayType * -GUCArrayAdd(ArrayType *array, ArrayType **usersetArray, - const char *name, const char *value, bool user_set) +GUCArrayAdd(ArrayType *array, const char *name, const char *value) { struct config_generic *record; Datum datum; @@ -6309,7 +6289,7 @@ GUCArrayAdd(ArrayType *array, ArrayType **usersetArray, Assert(value); /* test if the option is valid and we're allowed to set it */ - (void) validate_option_array_item(name, value, user_set, false); + (void) validate_option_array_item(name, value, false); /* normalize name (converts obsolete GUC names to modern spellings) */ record = find_option(name, false, true, WARNING); @@ -6350,27 +6330,6 @@ GUCArrayAdd(ArrayType *array, ArrayType **usersetArray, /* check for match up through and including '=' */ if (strncmp(current, newval, strlen(name) + 1) == 0) { - bool currentUserSet = false; - - if (usersetArray) - { - currentUserSet = DatumGetBool(array_ref(*usersetArray, 1, &i, - -1 /* varlenarray */ , - sizeof(bool) /* BOOL's typlen */ , - true /* BOOL's typbyval */ , - TYPALIGN_CHAR /* BOOL's typalign */ , - &isnull)); - if (isnull) - currentUserSet = false; - } - - /* - * Recheck permissions if we found an option without USER SET - * flag while we're setting an option with USER SET flag. - */ - if (!currentUserSet && user_set) - (void) validate_option_array_item(name, value, - false, false); index = i; break; } @@ -6383,25 +6342,9 @@ GUCArrayAdd(ArrayType *array, ArrayType **usersetArray, -1 /* TEXT's typlen */ , false /* TEXT's typbyval */ , TYPALIGN_INT /* TEXT's typalign */ ); - - if (usersetArray) - *usersetArray = array_set(*usersetArray, 1, &index, - BoolGetDatum(user_set), - false, - -1 /* varlena array */ , - sizeof(bool) /* BOOL's typlen */ , - true /* BOOL's typbyval */ , - TYPALIGN_CHAR /* BOOL's typalign */ ); } else - { a = construct_array_builtin(&datum, 1, TEXTOID); - if (usersetArray) - { - datum = BoolGetDatum(user_set); - *usersetArray = construct_array_builtin(&datum, 1, BOOLOID); - } - } return a; } @@ -6413,16 +6356,18 @@ GUCArrayAdd(ArrayType *array, ArrayType **usersetArray, * is NULL then a null should be stored. */ ArrayType * -GUCArrayDelete(ArrayType *array, ArrayType **usersetArray, const char *name) +GUCArrayDelete(ArrayType *array, const char *name) { struct config_generic *record; ArrayType *newarray; - ArrayType *newUsersetArray; int i; int index; Assert(name); + /* test if the option is valid and we're allowed to set it */ + (void) validate_option_array_item(name, NULL, false); + /* normalize name (converts obsolete GUC names to modern spellings) */ record = find_option(name, false, true, WARNING); if (record) @@ -6433,13 +6378,11 @@ GUCArrayDelete(ArrayType *array, ArrayType **usersetArray, const char *name) return NULL; newarray = NULL; - newUsersetArray = NULL; index = 1; for (i = 1; i <= ARR_DIMS(array)[0]; i++) { Datum d; - Datum userSetDatum = BoolGetDatum(false); char *val; bool isnull; @@ -6453,29 +6396,13 @@ GUCArrayDelete(ArrayType *array, ArrayType **usersetArray, const char *name) continue; val = TextDatumGetCString(d); - if (usersetArray) - userSetDatum = array_ref(*usersetArray, 1, &i, - -1 /* varlenarray */ , - sizeof(bool) /* BOOL's typlen */ , - true /* BOOL's typbyval */ , - TYPALIGN_CHAR /* BOOL's typalign */ , - &isnull); - if (isnull) - userSetDatum = BoolGetDatum(false); - /* ignore entry if it's what we want to delete */ if (strncmp(val, name, strlen(name)) == 0 && val[strlen(name)] == '=') - { - /* test if the option is valid and we're allowed to set it */ - (void) validate_option_array_item(name, NULL, - DatumGetBool(userSetDatum), false); continue; - } /* else add it to the output array */ if (newarray) - { newarray = array_set(newarray, 1, &index, d, false, @@ -6483,29 +6410,12 @@ GUCArrayDelete(ArrayType *array, ArrayType **usersetArray, const char *name) -1 /* TEXT's typlen */ , false /* TEXT's typbyval */ , TYPALIGN_INT /* TEXT's typalign */ ); - if (usersetArray) - newUsersetArray = array_set(newUsersetArray, 1, &index, - userSetDatum, - false, - -1 /* varlena array */ , - sizeof(bool) /* BOOL's typlen */ , - true /* BOOL's typbyval */ , - TYPALIGN_CHAR /* BOOL's typalign */ ); - } else - { newarray = construct_array_builtin(&d, 1, TEXTOID); - if (usersetArray) - newUsersetArray = construct_array_builtin(&userSetDatum, 1, - BOOLOID); - } index++; } - if (usersetArray) - *usersetArray = newUsersetArray; - return newarray; } @@ -6516,10 +6426,9 @@ GUCArrayDelete(ArrayType *array, ArrayType **usersetArray, const char *name) * those that are PGC_USERSET or we have permission to set */ ArrayType * -GUCArrayReset(ArrayType *array, ArrayType **usersetArray) +GUCArrayReset(ArrayType *array) { ArrayType *newarray; - ArrayType *newUsersetArray; int i; int index; @@ -6532,13 +6441,11 @@ GUCArrayReset(ArrayType *array, ArrayType **usersetArray) return NULL; newarray = NULL; - newUsersetArray = NULL; index = 1; for (i = 1; i <= ARR_DIMS(array)[0]; i++) { Datum d; - Datum userSetDatum = BoolGetDatum(false); char *val; char *eqsgn; bool isnull; @@ -6553,27 +6460,15 @@ GUCArrayReset(ArrayType *array, ArrayType **usersetArray) continue; val = TextDatumGetCString(d); - if (usersetArray) - userSetDatum = array_ref(*usersetArray, 1, &i, - -1 /* varlenarray */ , - sizeof(bool) /* BOOL's typlen */ , - true /* BOOL's typbyval */ , - TYPALIGN_CHAR /* BOOL's typalign */ , - &isnull); - if (isnull) - userSetDatum = BoolGetDatum(false); - eqsgn = strchr(val, '='); *eqsgn = '\0'; /* skip if we have permission to delete it */ - if (validate_option_array_item(val, NULL, - DatumGetBool(userSetDatum), true)) + if (validate_option_array_item(val, NULL, true)) continue; /* else add it to the output array */ if (newarray) - { newarray = array_set(newarray, 1, &index, d, false, @@ -6581,29 +6476,13 @@ GUCArrayReset(ArrayType *array, ArrayType **usersetArray) -1 /* TEXT's typlen */ , false /* TEXT's typbyval */ , TYPALIGN_INT /* TEXT's typalign */ ); - if (usersetArray) - newUsersetArray = array_set(newUsersetArray, 1, &index, - userSetDatum, - false, - -1 /* varlena array */ , - sizeof(bool) /* BOOL's typlen */ , - true /* BOOL's typbyval */ , - TYPALIGN_CHAR /* BOOL's typalign */ ); - } else - { newarray = construct_array_builtin(&d, 1, TEXTOID); - if (usersetArray) - newUsersetArray = construct_array_builtin(&userSetDatum, 1, BOOLOID); - } index++; pfree(val); } - if (usersetArray) - *usersetArray = newUsersetArray; - return newarray; } @@ -6611,16 +6490,15 @@ GUCArrayReset(ArrayType *array, ArrayType **usersetArray) * Validate a proposed option setting for GUCArrayAdd/Delete/Reset. * * name is the option name. value is the proposed value for the Add case, - * or NULL for the Delete/Reset cases. user_set indicates this is the USER SET - * option. If skipIfNoPermissions is true, it's not an error to have no - * permissions to set the option. + * or NULL for the Delete/Reset cases. If skipIfNoPermissions is true, it's + * not an error to have no permissions to set the option. * * Returns true if OK, false if skipIfNoPermissions is true and user does not * have permission to change this option (all other error cases result in an * error being thrown). */ static bool -validate_option_array_item(const char *name, const char *value, bool user_set, +validate_option_array_item(const char *name, const char *value, bool skipIfNoPermissions) { @@ -6656,10 +6534,8 @@ validate_option_array_item(const char *name, const char *value, bool user_set, { /* * We cannot do any meaningful check on the value, so only permissions - * are useful to check. USER SET options are always allowed. + * are useful to check. */ - if (user_set) - return true; if (superuser() || pg_parameter_aclcheck(name, GetUserId(), ACL_SET) == ACLCHECK_OK) return true; diff --git a/src/backend/utils/misc/guc_funcs.c b/src/backend/utils/misc/guc_funcs.c index 52c361e975..0903ba43a9 100644 --- a/src/backend/utils/misc/guc_funcs.c +++ b/src/backend/utils/misc/guc_funcs.c @@ -166,22 +166,12 @@ ExecSetVariableStmt(VariableSetStmt *stmt, bool isTopLevel) char * ExtractSetVariableArgs(VariableSetStmt *stmt) { - switch (stmt->kind) { case VAR_SET_VALUE: return flatten_set_variable_args(stmt->name, stmt->args); case VAR_SET_CURRENT: - { - struct config_generic *record; - char *result; - - result = GetConfigOptionByName(stmt->name, NULL, false); - record = find_option(stmt->name, false, false, ERROR); - stmt->user_set = (record->scontext == PGC_USERSET); - - return result; - } + return GetConfigOptionByName(stmt->name, NULL, false); default: return NULL; } diff --git a/src/bin/pg_dump/dumputils.c b/src/bin/pg_dump/dumputils.c index 079693585c..0ea96346cb 100644 --- a/src/bin/pg_dump/dumputils.c +++ b/src/bin/pg_dump/dumputils.c @@ -821,7 +821,6 @@ SplitGUCList(char *rawstring, char separator, */ void makeAlterConfigCommand(PGconn *conn, const char *configitem, - const char *userset, const char *type, const char *name, const char *type2, const char *name2, PQExpBuffer buf) @@ -880,10 +879,6 @@ makeAlterConfigCommand(PGconn *conn, const char *configitem, else appendStringLiteralConn(buf, pos, conn); - /* Add USER SET flag if specified in the string */ - if (userset && !strcmp(userset, "t")) - appendPQExpBufferStr(buf, " USER SET"); - appendPQExpBufferStr(buf, ";\n"); pg_free(mine); diff --git a/src/bin/pg_dump/dumputils.h b/src/bin/pg_dump/dumputils.h index 7f3f21e89d..2c81f51837 100644 --- a/src/bin/pg_dump/dumputils.h +++ b/src/bin/pg_dump/dumputils.h @@ -59,7 +59,6 @@ extern bool SplitGUCList(char *rawstring, char separator, char ***namelist); extern void makeAlterConfigCommand(PGconn *conn, const char *configitem, - const char *userset, const char *type, const char *name, const char *type2, const char *name2, PQExpBuffer buf); diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 41a51ec5cd..f9cbeb65ab 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -3385,49 +3385,32 @@ dumpDatabaseConfig(Archive *AH, PQExpBuffer outbuf, PGresult *res; /* First collect database-specific options */ - printfPQExpBuffer(buf, "SELECT unnest(setconfig)"); - if (AH->remoteVersion >= 160000) - appendPQExpBufferStr(buf, ", unnest(setuser)"); - appendPQExpBuffer(buf, " FROM pg_db_role_setting " + printfPQExpBuffer(buf, "SELECT unnest(setconfig) FROM pg_db_role_setting " "WHERE setrole = 0 AND setdatabase = '%u'::oid", dboid); res = ExecuteSqlQuery(AH, buf->data, PGRES_TUPLES_OK); for (int i = 0; i < PQntuples(res); i++) - { - char *userset = NULL; - - if (AH->remoteVersion >= 160000) - userset = PQgetvalue(res, i, 1); - makeAlterConfigCommand(conn, PQgetvalue(res, i, 0), userset, + makeAlterConfigCommand(conn, PQgetvalue(res, i, 0), "DATABASE", dbname, NULL, NULL, outbuf); - } PQclear(res); /* Now look for role-and-database-specific options */ - printfPQExpBuffer(buf, "SELECT rolname, unnest(setconfig)"); - if (AH->remoteVersion >= 160000) - appendPQExpBufferStr(buf, ", unnest(setuser)"); - appendPQExpBuffer(buf, " FROM pg_db_role_setting s, pg_roles r " + printfPQExpBuffer(buf, "SELECT rolname, unnest(setconfig) " + "FROM pg_db_role_setting s, pg_roles r " "WHERE setrole = r.oid AND setdatabase = '%u'::oid", dboid); res = ExecuteSqlQuery(AH, buf->data, PGRES_TUPLES_OK); for (int i = 0; i < PQntuples(res); i++) - { - char *userset = NULL; - - if (AH->remoteVersion >= 160000) - userset = PQgetvalue(res, i, 2); - makeAlterConfigCommand(conn, PQgetvalue(res, i, 1), userset, + makeAlterConfigCommand(conn, PQgetvalue(res, i, 1), "ROLE", PQgetvalue(res, i, 0), "DATABASE", dbname, outbuf); - } PQclear(res); diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c index 988a0cd473..c5647d059b 100644 --- a/src/bin/pg_dump/pg_dumpall.c +++ b/src/bin/pg_dump/pg_dumpall.c @@ -1385,10 +1385,7 @@ dumpUserConfig(PGconn *conn, const char *username) PQExpBuffer buf = createPQExpBuffer(); PGresult *res; - printfPQExpBuffer(buf, "SELECT unnest(setconfig)"); - if (server_version >= 160000) - appendPQExpBufferStr(buf, ", unnest(setuser)"); - appendPQExpBuffer(buf, " FROM pg_db_role_setting " + printfPQExpBuffer(buf, "SELECT unnest(setconfig) FROM pg_db_role_setting " "WHERE setdatabase = 0 AND setrole = " "(SELECT oid FROM %s WHERE rolname = ", role_catalog); @@ -1402,13 +1399,8 @@ dumpUserConfig(PGconn *conn, const char *username) for (int i = 0; i < PQntuples(res); i++) { - char *userset = NULL; - - if (server_version >= 160000) - userset = PQgetvalue(res, i, 1); - resetPQExpBuffer(buf); - makeAlterConfigCommand(conn, PQgetvalue(res, i, 0), userset, + makeAlterConfigCommand(conn, PQgetvalue(res, i, 0), "ROLE", username, NULL, NULL, buf); fprintf(OPF, "%s", buf->data); diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index 50f39a2e50..ab4279ed58 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -3776,16 +3776,13 @@ listDbRoleSettings(const char *pattern, const char *pattern2) initPQExpBuffer(&buf); printfPQExpBuffer(&buf, "SELECT rolname AS \"%s\", datname AS \"%s\",\n" - "pg_catalog.array_to_string(setconfig, E'\\n') AS \"%s\"", + "pg_catalog.array_to_string(setconfig, E'\\n') AS \"%s\"\n" + "FROM pg_catalog.pg_db_role_setting s\n" + "LEFT JOIN pg_catalog.pg_database d ON d.oid = setdatabase\n" + "LEFT JOIN pg_catalog.pg_roles r ON r.oid = setrole\n", gettext_noop("Role"), gettext_noop("Database"), gettext_noop("Settings")); - if (pset.sversion >= 160000) - appendPQExpBuffer(&buf, ",\npg_catalog.array_to_string(setuser, E'\\n') AS \"%s\"", - gettext_noop("User set")); - appendPQExpBuffer(&buf, "\nFROM pg_catalog.pg_db_role_setting s\n" - "LEFT JOIN pg_catalog.pg_database d ON d.oid = setdatabase\n" - "LEFT JOIN pg_catalog.pg_roles r ON r.oid = setrole\n"); if (!validateSQLNamePattern(&buf, pattern, false, false, NULL, "r.rolname", NULL, NULL, &havewhere, 1)) goto error_return; diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c index bd04244969..677847e434 100644 --- a/src/bin/psql/tab-complete.c +++ b/src/bin/psql/tab-complete.c @@ -4515,10 +4515,6 @@ psql_completion(const char *text, int start, int end) } } } - /* Complete ALTER DATABASE|ROLE|USER ... SET ... TO ... USER SET */ - else if (HeadMatches("ALTER", "DATABASE|ROLE|USER") && - TailMatches("SET", MatchAny, "TO|=", MatchAny)) - COMPLETE_WITH("USER SET"); /* START TRANSACTION */ else if (Matches("START")) diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index e617381bf4..1afcfaf5ac 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -57,6 +57,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202305171 +#define CATALOG_VERSION_NO 202305172 #endif diff --git a/src/include/catalog/pg_db_role_setting.h b/src/include/catalog/pg_db_role_setting.h index 2f925be90d..4ba0d69e76 100644 --- a/src/include/catalog/pg_db_role_setting.h +++ b/src/include/catalog/pg_db_role_setting.h @@ -41,8 +41,6 @@ CATALOG(pg_db_role_setting,2964,DbRoleSettingRelationId) BKI_SHARED_RELATION #ifdef CATALOG_VARLEN /* variable-length fields start here */ text setconfig[1]; /* GUC settings to apply at login */ - - bool setuser[1]; /* USER SET flags for GUC settings */ #endif } FormData_pg_db_role_setting; diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index cc7b32b279..0ca298f5a1 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -2445,7 +2445,6 @@ typedef struct VariableSetStmt char *name; /* variable to be set */ List *args; /* List of A_Const nodes */ bool is_local; /* SET LOCAL? */ - bool user_set; } VariableSetStmt; /* ---------------------- diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h index ba89d013e6..d5253c7ed2 100644 --- a/src/include/utils/guc.h +++ b/src/include/utils/guc.h @@ -391,14 +391,11 @@ extern void AlterSystemSetConfigFile(AlterSystemStmt *altersysstmt); extern char *GetConfigOptionByName(const char *name, const char **varname, bool missing_ok); -extern void ProcessGUCArray(ArrayType *array, ArrayType *usersetArray, +extern void ProcessGUCArray(ArrayType *array, GucContext context, GucSource source, GucAction action); -extern ArrayType *GUCArrayAdd(ArrayType *array, ArrayType **usersetArray, - const char *name, const char *value, - bool user_set); -extern ArrayType *GUCArrayDelete(ArrayType *array, ArrayType **usersetArray, - const char *name); -extern ArrayType *GUCArrayReset(ArrayType *array, ArrayType **usersetArray); +extern ArrayType *GUCArrayAdd(ArrayType *array, const char *name, const char *value); +extern ArrayType *GUCArrayDelete(ArrayType *array, const char *name); +extern ArrayType *GUCArrayReset(ArrayType *array); extern void *guc_malloc(int elevel, size_t size); extern pg_nodiscard void *guc_realloc(int elevel, void *old, size_t size); diff --git a/src/test/modules/Makefile b/src/test/modules/Makefile index 79e3033ec2..6331c976dc 100644 --- a/src/test/modules/Makefile +++ b/src/test/modules/Makefile @@ -25,7 +25,6 @@ SUBDIRS = \ test_misc \ test_oat_hooks \ test_parser \ - test_pg_db_role_setting \ test_pg_dump \ test_predtest \ test_rbtree \ diff --git a/src/test/modules/meson.build b/src/test/modules/meson.build index dcb82ed68f..17d369e378 100644 --- a/src/test/modules/meson.build +++ b/src/test/modules/meson.build @@ -22,7 +22,6 @@ subdir('test_lfind') subdir('test_misc') subdir('test_oat_hooks') subdir('test_parser') -subdir('test_pg_db_role_setting') subdir('test_pg_dump') subdir('test_predtest') subdir('test_rbtree') diff --git a/src/test/modules/test_pg_db_role_setting/.gitignore b/src/test/modules/test_pg_db_role_setting/.gitignore deleted file mode 100644 index 5dcb3ff972..0000000000 --- a/src/test/modules/test_pg_db_role_setting/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -# Generated subdirectories -/log/ -/results/ -/tmp_check/ diff --git a/src/test/modules/test_pg_db_role_setting/Makefile b/src/test/modules/test_pg_db_role_setting/Makefile deleted file mode 100644 index 50ac02db44..0000000000 --- a/src/test/modules/test_pg_db_role_setting/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -# src/test/modules/test_pg_db_role_setting/Makefile - -MODULE_big = test_pg_db_role_setting -OBJS = \ - $(WIN32RES) \ - test_pg_db_role_setting.o -EXTENSION = test_pg_db_role_setting -DATA = test_pg_db_role_setting--1.0.sql - -PGFILEDESC = "test_pg_db_role_setting - tests for default GUC values stored in pg_db_role_settings" - -REGRESS = test_pg_db_role_setting - -# disable installcheck for now -NO_INSTALLCHECK = 1 - -ifdef USE_PGXS -PG_CONFIG = pg_config -PGXS := $(shell $(PG_CONFIG) --pgxs) -include $(PGXS) -else -subdir = src/test/modules/test_pg_db_role_setting -top_builddir = ../../../.. -include $(top_builddir)/src/Makefile.global -include $(top_srcdir)/contrib/contrib-global.mk -endif diff --git a/src/test/modules/test_pg_db_role_setting/expected/test_pg_db_role_setting.out b/src/test/modules/test_pg_db_role_setting/expected/test_pg_db_role_setting.out deleted file mode 100644 index ec18692c55..0000000000 --- a/src/test/modules/test_pg_db_role_setting/expected/test_pg_db_role_setting.out +++ /dev/null @@ -1,143 +0,0 @@ -CREATE EXTENSION test_pg_db_role_setting; -CREATE USER regress_super_user SUPERUSER; -CREATE USER regress_regular_user; -\c - regress_regular_user --- successfully set a placeholder value -SET test_pg_db_role_setting.superuser_param = 'aaa'; --- module is loaded, the placeholder value is thrown away -SELECT load_test_pg_db_role_setting(); -WARNING: permission denied to set parameter "test_pg_db_role_setting.superuser_param" - load_test_pg_db_role_setting ------------------------------- - -(1 row) - -SHOW test_pg_db_role_setting.superuser_param; - test_pg_db_role_setting.superuser_param ------------------------------------------ - superuser_param_value -(1 row) - -SHOW test_pg_db_role_setting.user_param; - test_pg_db_role_setting.user_param ------------------------------------- - user_param_value -(1 row) - -\c - regress_regular_user --- fail, not privileges -ALTER ROLE regress_regular_user SET test_pg_db_role_setting.superuser_param = 'aaa'; -ERROR: permission denied to set parameter "test_pg_db_role_setting.superuser_param" -ALTER ROLE regress_regular_user SET test_pg_db_role_setting.user_param = 'bbb'; -ERROR: permission denied to set parameter "test_pg_db_role_setting.user_param" --- success for USER SET parameters -ALTER ROLE regress_regular_user SET test_pg_db_role_setting.superuser_param = 'aaa' USER SET; -ALTER ROLE regress_regular_user SET test_pg_db_role_setting.user_param = 'bbb' USER SET; -\drds regress_regular_user - List of settings - Role | Database | Settings | User set -----------------------+----------+---------------------------------------------+---------- - regress_regular_user | | test_pg_db_role_setting.superuser_param=aaa+| t + - | | test_pg_db_role_setting.user_param=bbb | t -(1 row) - -\c - regress_regular_user --- successfully set placeholders -SHOW test_pg_db_role_setting.superuser_param; - test_pg_db_role_setting.superuser_param ------------------------------------------ - aaa -(1 row) - -SHOW test_pg_db_role_setting.user_param; - test_pg_db_role_setting.user_param ------------------------------------- - bbb -(1 row) - --- module is loaded, the placeholder value of superuser param is thrown away -SELECT load_test_pg_db_role_setting(); -WARNING: permission denied to set parameter "test_pg_db_role_setting.superuser_param" - load_test_pg_db_role_setting ------------------------------- - -(1 row) - -SHOW test_pg_db_role_setting.superuser_param; - test_pg_db_role_setting.superuser_param ------------------------------------------ - superuser_param_value -(1 row) - -SHOW test_pg_db_role_setting.user_param; - test_pg_db_role_setting.user_param ------------------------------------- - bbb -(1 row) - -\c - regress_super_user -ALTER ROLE regress_regular_user SET test_pg_db_role_setting.superuser_param = 'aaa'; -\drds regress_regular_user - List of settings - Role | Database | Settings | User set -----------------------+----------+---------------------------------------------+---------- - regress_regular_user | | test_pg_db_role_setting.superuser_param=aaa+| f + - | | test_pg_db_role_setting.user_param=bbb | t -(1 row) - -\c - regress_regular_user --- don't have a priviledge to change superuser value to user set one -ALTER ROLE regress_regular_user SET test_pg_db_role_setting.superuser_param = 'ccc' USER SET; -ERROR: permission denied to set parameter "test_pg_db_role_setting.superuser_param" -\c - regress_super_user -SELECT load_test_pg_db_role_setting(); - load_test_pg_db_role_setting ------------------------------- - -(1 row) - --- give the privilege to set SUSET param to the regular user -GRANT SET ON PARAMETER test_pg_db_role_setting.superuser_param TO regress_regular_user; -\c - regress_regular_user -ALTER ROLE regress_regular_user SET test_pg_db_role_setting.superuser_param = 'ccc'; -\drds regress_regular_user - List of settings - Role | Database | Settings | User set -----------------------+----------+---------------------------------------------+---------- - regress_regular_user | | test_pg_db_role_setting.superuser_param=ccc+| f + - | | test_pg_db_role_setting.user_param=bbb | t -(1 row) - -\c - regress_regular_user --- successfully set placeholders -SHOW test_pg_db_role_setting.superuser_param; - test_pg_db_role_setting.superuser_param ------------------------------------------ - ccc -(1 row) - -SHOW test_pg_db_role_setting.user_param; - test_pg_db_role_setting.user_param ------------------------------------- - bbb -(1 row) - --- module is loaded, and placeholder values are successfully set -SELECT load_test_pg_db_role_setting(); - load_test_pg_db_role_setting ------------------------------- - -(1 row) - -SHOW test_pg_db_role_setting.superuser_param; - test_pg_db_role_setting.superuser_param ------------------------------------------ - ccc -(1 row) - -SHOW test_pg_db_role_setting.user_param; - test_pg_db_role_setting.user_param ------------------------------------- - bbb -(1 row) - diff --git a/src/test/modules/test_pg_db_role_setting/meson.build b/src/test/modules/test_pg_db_role_setting/meson.build deleted file mode 100644 index 8b5881735c..0000000000 --- a/src/test/modules/test_pg_db_role_setting/meson.build +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright (c) 2022-2023, PostgreSQL Global Development Group - -test_pg_db_role_setting_sources = files( - 'test_pg_db_role_setting.c', -) - -if host_system == 'windows' - test_pg_db_role_setting_sources += rc_lib_gen.process(win32ver_rc, extra_args: [ - '--NAME', 'test_pg_db_role_setting', - '--FILEDESC', 'test_pg_db_role_setting - tests for default GUC values stored in pg_db_role_settings',]) -endif - -test_pg_db_role_setting = shared_module('test_pg_db_role_setting', - test_pg_db_role_setting_sources, - kwargs: pg_test_mod_args, -) -test_install_libs += test_pg_db_role_setting - -test_install_data += files( - 'test_pg_db_role_setting.control', - 'test_pg_db_role_setting--1.0.sql', -) - -tests += { - 'name': 'test_pg_db_role_setting', - 'sd': meson.current_source_dir(), - 'bd': meson.current_build_dir(), - 'regress': { - 'sql': [ - 'test_pg_db_role_setting', - ], - 'runningcheck': false, - }, -} diff --git a/src/test/modules/test_pg_db_role_setting/sql/test_pg_db_role_setting.sql b/src/test/modules/test_pg_db_role_setting/sql/test_pg_db_role_setting.sql deleted file mode 100644 index 44f231c6b4..0000000000 --- a/src/test/modules/test_pg_db_role_setting/sql/test_pg_db_role_setting.sql +++ /dev/null @@ -1,63 +0,0 @@ -CREATE EXTENSION test_pg_db_role_setting; -CREATE USER regress_super_user SUPERUSER; -CREATE USER regress_regular_user; - -\c - regress_regular_user --- successfully set a placeholder value -SET test_pg_db_role_setting.superuser_param = 'aaa'; - --- module is loaded, the placeholder value is thrown away -SELECT load_test_pg_db_role_setting(); - -SHOW test_pg_db_role_setting.superuser_param; -SHOW test_pg_db_role_setting.user_param; - -\c - regress_regular_user --- fail, not privileges -ALTER ROLE regress_regular_user SET test_pg_db_role_setting.superuser_param = 'aaa'; -ALTER ROLE regress_regular_user SET test_pg_db_role_setting.user_param = 'bbb'; --- success for USER SET parameters -ALTER ROLE regress_regular_user SET test_pg_db_role_setting.superuser_param = 'aaa' USER SET; -ALTER ROLE regress_regular_user SET test_pg_db_role_setting.user_param = 'bbb' USER SET; - -\drds regress_regular_user - -\c - regress_regular_user --- successfully set placeholders -SHOW test_pg_db_role_setting.superuser_param; -SHOW test_pg_db_role_setting.user_param; - --- module is loaded, the placeholder value of superuser param is thrown away -SELECT load_test_pg_db_role_setting(); - -SHOW test_pg_db_role_setting.superuser_param; -SHOW test_pg_db_role_setting.user_param; - -\c - regress_super_user -ALTER ROLE regress_regular_user SET test_pg_db_role_setting.superuser_param = 'aaa'; -\drds regress_regular_user - -\c - regress_regular_user --- don't have a priviledge to change superuser value to user set one -ALTER ROLE regress_regular_user SET test_pg_db_role_setting.superuser_param = 'ccc' USER SET; - -\c - regress_super_user -SELECT load_test_pg_db_role_setting(); --- give the privilege to set SUSET param to the regular user -GRANT SET ON PARAMETER test_pg_db_role_setting.superuser_param TO regress_regular_user; - -\c - regress_regular_user -ALTER ROLE regress_regular_user SET test_pg_db_role_setting.superuser_param = 'ccc'; - -\drds regress_regular_user - -\c - regress_regular_user --- successfully set placeholders -SHOW test_pg_db_role_setting.superuser_param; -SHOW test_pg_db_role_setting.user_param; - --- module is loaded, and placeholder values are successfully set -SELECT load_test_pg_db_role_setting(); - -SHOW test_pg_db_role_setting.superuser_param; -SHOW test_pg_db_role_setting.user_param; diff --git a/src/test/modules/test_pg_db_role_setting/test_pg_db_role_setting--1.0.sql b/src/test/modules/test_pg_db_role_setting/test_pg_db_role_setting--1.0.sql deleted file mode 100644 index 1ed3d285c7..0000000000 --- a/src/test/modules/test_pg_db_role_setting/test_pg_db_role_setting--1.0.sql +++ /dev/null @@ -1,7 +0,0 @@ -/* src/test/modules/test_pg_db_role_setting/test_pg_db_role_setting--1.0.sql */ - --- complain if script is sourced in psql, rather than via CREATE EXTENSION -\echo Use "CREATE EXTENSION test_pg_db_role_setting" to load this file. \quit - -CREATE FUNCTION load_test_pg_db_role_setting() RETURNS void - AS 'MODULE_PATHNAME' LANGUAGE C; diff --git a/src/test/modules/test_pg_db_role_setting/test_pg_db_role_setting.c b/src/test/modules/test_pg_db_role_setting/test_pg_db_role_setting.c deleted file mode 100644 index 91a36079f9..0000000000 --- a/src/test/modules/test_pg_db_role_setting/test_pg_db_role_setting.c +++ /dev/null @@ -1,57 +0,0 @@ -/*-------------------------------------------------------------------------- - * - * test_pg_db_role_setting.c - * Code for testing mandatory access control (MAC) using object access hooks. - * - * Copyright (c) 2022-2023, PostgreSQL Global Development Group - * - * IDENTIFICATION - * src/test/modules/test_pg_db_role_setting/test_pg_db_role_setting.c - * - * ------------------------------------------------------------------------- - */ - -#include "postgres.h" - -#include "utils/guc.h" - -PG_MODULE_MAGIC; - -PG_FUNCTION_INFO_V1(load_test_pg_db_role_setting); - -static char *superuser_param; -static char *user_param; - -/* - * Module load callback - */ -void -_PG_init(void) -{ - DefineCustomStringVariable("test_pg_db_role_setting.superuser_param", - "Sample superuser parameter.", - NULL, - &superuser_param, - "superuser_param_value", - PGC_SUSET, - 0, - NULL, NULL, NULL); - - DefineCustomStringVariable("test_pg_db_role_setting.user_param", - "Sample user parameter.", - NULL, - &user_param, - "user_param_value", - PGC_USERSET, - 0, - NULL, NULL, NULL); -} - -/* - * Empty function, which is used just to trigger load of this module. - */ -Datum -load_test_pg_db_role_setting(PG_FUNCTION_ARGS) -{ - PG_RETURN_VOID(); -} diff --git a/src/test/modules/test_pg_db_role_setting/test_pg_db_role_setting.control b/src/test/modules/test_pg_db_role_setting/test_pg_db_role_setting.control deleted file mode 100644 index 9678cff376..0000000000 --- a/src/test/modules/test_pg_db_role_setting/test_pg_db_role_setting.control +++ /dev/null @@ -1,7 +0,0 @@ -# test_pg_db_role_setting extension -comment = 'test_pg_db_role_setting - tests for default GUC values stored in pg_db_role_setting' -default_version = '1.0' -module_pathname = '$libdir/test_pg_db_role_setting' -relocatable = true -superuser = false -trusted = true diff --git a/src/test/regress/expected/psql.out b/src/test/regress/expected/psql.out index 956e475447..8f93028363 100644 --- a/src/test/regress/expected/psql.out +++ b/src/test/regress/expected/psql.out @@ -6217,9 +6217,9 @@ List of schemas (0 rows) \drds "no.such.setting" - List of settings - Role | Database | Settings | User set -------+----------+----------+---------- + List of settings + Role | Database | Settings +------+----------+---------- (0 rows) \dRp "no.such.publication" |