public inbox for [email protected]
help / color / mirror / Atom feedFrom: Marcelo Zabani <[email protected]>
To: pgsql-generallists.postgresql.org <[email protected]>
Subject: RESET, NULL and empty-string valued settings and transaction isolation
Date: Sat, 19 Oct 2024 11:07:06 -0300
Message-ID: <CACgY3QbXpCBpM9ShSo2-VM9x=5GiXJeY-4hqhCXa8bkEGuXGvw@mail.gmail.com> (raw)
Hi, according to the docs, RESET sets the value of a setting to
"The default value is defined as the value that the parameter would have
had, if no SET had ever been issued for it in the current session"
Which confuses me given that the value starts being NULL in the session and
then turns into an empty string:
$ psql
=> select current_setting('my.test', true) is null; -- true
=> set my.test = 'abc';
=> reset my.test;
=> select current_setting('my.test', true) is null; -- false
=> select current_setting('my.test', true)=''; -- true
A similar effect happens with transactions and SET LOCAL:
=> begin;
=*> set local my.test='abc';
=*> rollback; -- commit works too
=> select current_setting('my.test', true) = ''; -- true
Is this expected? I thought even if I misunderstand the docs, the effect
isn't very nice because SQL like
current_setting('my.some_boolean_setting')::boolean will fail after a
transaction with SET LOCAL sets it, a side-effect that can be particularly
confusing and basically requires usage of nullif(.., '') or other explicit
checks around every current_setting call-site in practice.
Thanks in advance,
Marcelo.
view thread (2+ messages) latest in thread
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected], [email protected]
Subject: Re: RESET, NULL and empty-string valued settings and transaction isolation
In-Reply-To: <CACgY3QbXpCBpM9ShSo2-VM9x=5GiXJeY-4hqhCXa8bkEGuXGvw@mail.gmail.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox