1
0
mirror of https://github.com/postgres/postgres.git synced 2025-05-09 18:21:05 +03:00

Fix worker_spi when launching workers without shared_preload_libraries

Currently, the database name to connect is initialized only when the
module is loaded with shared_preload_libraries, causing any call of
worker_spi_launch() to fail if the library is not loaded for a dynamic
bgworker launch.  Rather than making the GUC defining the database to
connect to a PGC_POSTMASTER, this commit switches worker_spi.database to
PGC_SIGHUP, loaded even if the module's library is loaded dynamically
for a worker.

We have been discussing about the integration of more advanced tests in
this module, with and without shared_preload_libraries set, so this
eases a bit the work planned in this area.

No backpatch is done as, while this is a bug, it changes the definition
of worker_spi.database.

Author: Masahiro Ikeda
Reviewed-by: Bharath Rupireddy
Discussion: https://postgr.es/m/d30d3ea7d21cb7c9e1e3cc47e301f1b6@oss.nttdata.com
This commit is contained in:
Michael Paquier 2023-07-21 12:07:52 +09:00
parent 9089287aa0
commit 97ff8dd02c

View File

@ -283,6 +283,11 @@ _PG_init(void)
BackgroundWorker worker; BackgroundWorker worker;
/* get the configuration */ /* get the configuration */
/*
* These GUCs are defined even if this library is not loaded with
* shared_preload_libraries, for worker_spi_launch().
*/
DefineCustomIntVariable("worker_spi.naptime", DefineCustomIntVariable("worker_spi.naptime",
"Duration between each check (in seconds).", "Duration between each check (in seconds).",
NULL, NULL,
@ -296,6 +301,15 @@ _PG_init(void)
NULL, NULL,
NULL); NULL);
DefineCustomStringVariable("worker_spi.database",
"Database to connect to.",
NULL,
&worker_spi_database,
"postgres",
PGC_SIGHUP,
0,
NULL, NULL, NULL);
if (!process_shared_preload_libraries_in_progress) if (!process_shared_preload_libraries_in_progress)
return; return;
@ -312,15 +326,6 @@ _PG_init(void)
NULL, NULL,
NULL); NULL);
DefineCustomStringVariable("worker_spi.database",
"Database to connect to.",
NULL,
&worker_spi_database,
"postgres",
PGC_POSTMASTER,
0,
NULL, NULL, NULL);
MarkGUCPrefixReserved("worker_spi"); MarkGUCPrefixReserved("worker_spi");
/* set up common data for all our workers */ /* set up common data for all our workers */