postgresql custom variable in pg_settings table

Started by Yi Sunabout 2 years ago3 messagesgeneral
Jump to latest
#1Yi Sun
yinan81@gmail.com

Hello,

We custom set variable

Added patroni.nodes_count = 2 in postgresql.conf

postgres=# show patroni.nodes_count;
patroni.nodes_count
---------------------
2
(1 row)

postgres=# select current_setting('patroni.nodes_count');
current_setting
-----------------
2
(1 row)

But can not select it from pg_settings, as we use pgwatch2 to monitor, to
avoid pgwatch2 script change prefer to use pg_setting not current_setting()
function, is it possible to get the custom variable from pg_setting please?
Thanks

Best Regards
SY

#2Achilleas Mantzios
a.mantzios@cloud.gatewaynet.com
In reply to: Yi Sun (#1)
Re: postgresql custom variable in pg_settings table

On 1/9/24 09:38, Yi Sun wrote:

Hello,

We custom set variable

Added patroni.nodes_count = 2 in postgresql.conf

postgres=# show patroni.nodes_count;
 patroni.nodes_count
---------------------
 2
(1 row)

postgres=# select current_setting('patroni.nodes_count');
 current_setting
-----------------
 2
(1 row)

But can not select it from pg_settings, as we use pgwatch2 to monitor,
to avoid pgwatch2 script change prefer to use pg_setting not
current_setting() function, is it possible to get the custom variable
from pg_setting please? Thanks

You may look into pg_file_settings :

select setting from pg_file_settings  where name = 'patroni.nodes_count';

Show quoted text

Best Regards
SY

#3jian he
jian.universality@gmail.com
In reply to: Yi Sun (#1)
Re: postgresql custom variable in pg_settings table

On Tue, Jan 9, 2024 at 3:38 PM Yi Sun <yinan81@gmail.com> wrote:

Hello,

But can not select it from pg_settings, as we use pgwatch2 to monitor, to avoid pgwatch2 script change prefer to use pg_setting not current_setting() function, is it possible to get the custom variable from pg_setting please? Thanks

the following minimum c function doing that.
you can use LOAD (https://www.postgresql.org/docs/16/sql-load.html) to
load it, which will make it session persistent.
to make it always persistent, you need to make it in the
shared_preload_libraries.
of course, you can define more Custom Variables.

#include "postgres.h"
#include "funcapi.h"
#include "fmgr.h"
#include "utils/guc.h"
PG_MODULE_MAGIC;
static int test_guc = 2;
void
_PG_init(void)
{
/* Define custom GUC variables. */
DefineCustomIntVariable("patroni.count",
"test .",
"Valid range is 1 .. 11.",
&test_guc,
2,
1,
11,
PGC_USERSET,
0,
NULL,
NULL,
NULL);
MarkGUCPrefixReserved("patroni");
}