Обсуждение: Testing truthiness of GUC variables?
If I set a custom GUC variable to a boolean value, such as:
SET myapp.audit = 'on';
is there a way to test it for truthiness in the same way the standard built-in variables are? IOW, the docs say a boolean can be written as:
Boolean values can be written as on, off, true, false, yes, no, 1, 0 (all case-insensitive) or any unambiguous prefix of these.
On Sun, Sep 14, 2014 at 11:17 PM, Abelard Hoffman <abelardhoffman@gmail.com> wrote:
If I set a custom GUC variable to a boolean value, such as:SET myapp.audit = 'on';is there a way to test it for truthiness in the same way the standard built-in variables are? IOW, the docs say a boolean can be written as:Boolean values can be written as on, off, true, false, yes, no, 1, 0 (all case-insensitive) or any unambiguous prefix of these.
Sorry, hit send too soon. I meant to ask, is there a built-in function I can call, given the value from current_setting('myapp.audit'), that will test it using the same logic?
Abelard Hoffman <abelardhoffman@gmail.com> wrote: >> Boolean values can be written as on, off, true, false, yes, no, >> 1, 0 (all case-insensitive) or any unambiguous prefix of these. > > is there a built-in function I can call, given the value from > current_setting('myapp.audit'), that will test it using the same > logic? You can *set* a boolean setting with any of those, but that doesn't mean it will be stored as the string you used: test=# set default_transaction_read_only = true; SET test=# show default_transaction_read_only; default_transaction_read_only ------------------------------- on (1 row) test=# set default_transaction_read_only = on; SET test=# show default_transaction_read_only; default_transaction_read_only ------------------------------- on (1 row) test=# set default_transaction_read_only = yes; SET test=# show default_transaction_read_only; default_transaction_read_only ------------------------------- on (1 row) test=# set default_transaction_read_only = 1; SET test=# show default_transaction_read_only; default_transaction_read_only ------------------------------- on (1 row) -- Kevin Grittner EDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
On Mon, Sep 15, 2014 at 5:39 AM, Kevin Grittner <kgrittn@ymail.com> wrote:
Abelard Hoffman <abelardhoffman@gmail.com> wrote:
>> Boolean values can be written as on, off, true, false, yes, no,
>> 1, 0 (all case-insensitive) or any unambiguous prefix of these.
>
> is there a built-in function I can call, given the value from
> current_setting('myapp.audit'), that will test it using the same
> logic?
You can *set* a boolean setting with any of those, but that doesn't
mean it will be stored as the string you used:
Thanks, but I meant for user defined variables:
test=# set myapp.foo = true;
SET
test=# show myapp.foo;
myapp.foo
-----------
true
(1 row)
test=# set myapp.foo = on;
SET
test=# show myapp.foo;
myapp.foo
-----------
on
(1 row)
I realize now though that all I need to do is cast it to bool:
test=# set myapp.foo = FA;
SET
test=# select current_setting('myapp.foo')::bool;
current_setting
-----------------
f
(1 row)