Skip to content

Commit

Permalink
Revert "Add USER SET parameter values for pg_db_role_setting"
Browse files Browse the repository at this point in the history
This reverts commit 096dd80 and its fixups beecbe8, afdd9f7,
529da08, db93e73.

Catversion is bumped.

Discussion: https://postgr.es/m/d46f9265-ff3c-6743-2278-6772598233c2%40pgmasters.net
  • Loading branch information
akorotkov committed May 17, 2023
1 parent 58dc80a commit b9a7a82
Show file tree
Hide file tree
Showing 34 changed files with 51 additions and 677 deletions.
10 changes: 0 additions & 10 deletions doc/src/sgml/catalogs.sgml
Original file line number Diff line number Diff line change
Expand Up @@ -3212,16 +3212,6 @@ SCRAM-SHA-256$<replaceable>&lt;iteration count&gt;</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>
Expand Down
15 changes: 1 addition & 14 deletions doc/src/sgml/ref/alter_database.sgml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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>

Expand Down
22 changes: 1 addition & 21 deletions doc/src/sgml/ref/alter_role.sgml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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>

Expand Down Expand Up @@ -347,13 +334,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>

Expand Down
2 changes: 1 addition & 1 deletion doc/src/sgml/ref/alter_user.sgml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 0 additions & 7 deletions doc/src/sgml/ref/psql-ref.sgml
Original file line number Diff line number Diff line change
Expand Up @@ -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>

Expand Down
46 changes: 7 additions & 39 deletions src/backend/catalog/pg_db_role_setting.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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);
}
}

Expand Down
1 change: 0 additions & 1 deletion src/backend/catalog/pg_proc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
4 changes: 2 additions & 2 deletions src/backend/commands/functioncmds.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}

Expand Down
20 changes: 0 additions & 20 deletions src/backend/parser/gram.y
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
1 change: 0 additions & 1 deletion src/backend/utils/adt/arrayfuncs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
1 change: 0 additions & 1 deletion src/backend/utils/fmgr/fmgr.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
Loading

0 comments on commit b9a7a82

Please sign in to comment.