Re: BUG #15271: Documentation / Error reporting on GUC parameter change

From: Bruce Momjian <bruce(at)momjian(dot)us>
To: axos88(at)gmail(dot)com, pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: BUG #15271: Documentation / Error reporting on GUC parameter change
Date: 2018-08-07 17:23:40
Message-ID: 20180807172340.GC7297@momjian.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On Tue, Jul 10, 2018 at 08:59:03AM +0000, PG Bug reporting form wrote:
> The following bug has been logged on the website:
>
> Bug reference: 15271
> Logged by: Akos Vandra
> Email address: axos88(at)gmail(dot)com
> PostgreSQL version: 10.4
> Operating system: Mac OS X, Linux
> Description:
>
> I am using the pg_trgm extension, and would like to change the
> similarity_threshold GUC parameter default value.
>
> Seems like when trying to alter a GUC parameter of an extension that was not
> yet loaded into session memory, the ALTER DATABASE command returns with an
> unexpected message, `ERROR: permission denied to set parameter
> "pg_trgm.similarity_threshold"`, although that is NOT the problem.
>
> I understand this may have sever implications, but obviously the expected
> behaviour would be to be able to set that GUC parameter regardless if the
> extension has been loaded into session memory (and probably load it if
> not).
>
> Workaround:
> Before the `alter database` command issue a command such as `select
> show_limit();` to load the extension into session memory.
>
> Repro:
> 1. CONNECT as superuser
> 1. CREATE USER test PASSWORD 'test';
> 2. CREATE DATABASE test OWNER test;
> 3. DISCONNECT AND CONNECT as test user
> 4. ALTER DATABASE test SET pg_trgm.similarity_threshold = 0.42;
>
> Expected:
> Successful alter
>
> Actual:
> ERROR: permission denied to set parameter
> "pg_trgm.similarity_threshold"
>
> Workaround:
>
> test=> alter database test set pg_trgm.similarity_threshold = 0.42;
> ERROR: permission denied to set parameter "pg_trgm.similarity_threshold"
> test=> select show_limit();
> show_limit
> ------------
> 0.2
> (1 row)
>
> test=> alter database test set pg_trgm.similarity_threshold = 0.42;
> ALTER DATABASE
>
> Workaround effect:
>
> test=> select show_limit();
> show_limit
> ------------
> 0.2
> (1 row)
>
> test=> \q
> $ psql -U test -d test
> psql (10.4)
> Type "help" for help.
>
> test=> select show_limit();
> show_limit
> ------------
> 0.42
> (1 row)

I looked at this report and the cause seems deeper than reported. The
reporter states that having the extension loaded would fix it, but doing
the ALTER DATABASE as superuser also fixes it:

$ psql -U postgres postgres
psql (10.5)
Type "help" for help.

postgres=> CREATE USER test PASSWORD 'test';
CREATE ROLE
postgres=> CREATE DATABASE test OWNER test;
CREATE DATABASE

postgres=> \c test test
You are now connected to database "test" as user "test".
test=> ALTER DATABASE test SET pg_trgm.similarity_threshold = 0.42;
--> ERROR: permission denied to set parameter "pg_trgm.similarity_threshold"
test=> ALTER DATABASE test SET work_mem = '200MB';
--> ALTER DATABASE
test=> SET x.y = 0;
--> SET

test=> \c test postgres
You are now connected to database "test" as user "postgres".
test=> ALTER DATABASE test SET pg_trgm.similarity_threshold = 0.42;
--> ALTER DATABASE

The pastern I see is that non-superusers can't set custom GUCs via ALTER
DATABASE, though they can via plain SET. Our ALTER DATABASE
documentation has vague wording wording about this:

Only the database owner or a superuser can change the session defaults
for a database. Certain variables cannot be set this way, or can only be
set by a superuser.

I am not sure how we could improve this.

--
Bruce Momjian <bruce(at)momjian(dot)us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ As you are, so once was I. As I am, so you will be. +
+ Ancient Roman grave inscription +

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Bruce Momjian 2018-08-07 17:46:56 Re: BUG #15273: Lexer bug with UESCAPE
Previous Message PG Bug reporting form 2018-08-07 17:10:07 BUG #15314: ..