Обсуждение: Testing truthiness of GUC variables?

Поиск
Список
Период
Сортировка

Testing truthiness of GUC variables?

От
Abelard Hoffman
Дата:
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 onofftruefalseyesno10 (all case-insensitive) or any unambiguous prefix of these.

Re: Testing truthiness of GUC variables?

От
Abelard Hoffman
Дата:


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 onofftruefalseyesno10 (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?

Re: Testing truthiness of GUC variables?

От
Kevin Grittner
Дата:
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


Re: Testing truthiness of GUC variables?

От
Abelard Hoffman
Дата:


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)