diff --git a/src/backend/replication/logical/launcher.c b/src/backend/replication/logical/launcher.c index 27c3a91fb75..48c7cf39422 100644 --- a/src/backend/replication/logical/launcher.c +++ b/src/backend/replication/logical/launcher.c @@ -51,6 +51,8 @@ int max_logical_replication_workers = 4; int max_sync_workers_per_subscription = 2; int max_parallel_apply_workers_per_subscription = 2; +bool disable_logical_replication_subscribers = false; /* NEON: GUC is defined in neon extension */ + LogicalRepWorker *MyLogicalRepWorker = NULL; typedef struct LogicalRepCtxStruct @@ -333,6 +335,15 @@ logicalrep_worker_launch(LogicalRepWorkerType wtype, (errcode(ERRCODE_CONFIGURATION_LIMIT_EXCEEDED), errmsg("cannot start logical replication workers when max_replication_slots = 0"))); + /* NEON GUC that allows to control logical replication without postgres restart */ + if (disable_logical_replication_subscribers) + { + ereport(WARNING, + (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), + errmsg("cannot start logical replication workers when disable_logical_replication_subscribers=true"))); + return false; + } + /* * We need to do the modification of the shared memory under lock so that * we have consistent view. diff --git a/src/include/replication/logicallauncher.h b/src/include/replication/logicallauncher.h index ff0438b5bb7..bb49f05dd6f 100644 --- a/src/include/replication/logicallauncher.h +++ b/src/include/replication/logicallauncher.h @@ -16,6 +16,8 @@ extern PGDLLIMPORT int max_logical_replication_workers; extern PGDLLIMPORT int max_sync_workers_per_subscription; extern PGDLLIMPORT int max_parallel_apply_workers_per_subscription; +extern PGDLLIMPORT bool disable_logical_replication_subscribers; + extern void ApplyLauncherRegister(void); extern void ApplyLauncherMain(Datum main_arg);