diff options
author | Magnus Hagander <magnus@hagander.net> | 2018-04-05 18:59:32 +0200 |
---|---|---|
committer | Magnus Hagander <magnus@hagander.net> | 2018-04-05 19:02:45 +0200 |
commit | eed1ce72e1593d3e8b7461d7744808d4d6bf402b (patch) | |
tree | 19b57473d3ac769d9e03562924a2ab33ab0bc6b0 /src/backend/utils/init/postinit.c | |
parent | 1664ae1978bf0f5ee940dc2fc8313e6400a7e7da (diff) | |
download | postgresql-eed1ce72e1593d3e8b7461d7744808d4d6bf402b.tar.gz postgresql-eed1ce72e1593d3e8b7461d7744808d4d6bf402b.zip |
Allow background workers to bypass datallowconn
THis adds a "flags" field to the BackgroundWorkerInitializeConnection()
and BackgroundWorkerInitializeConnectionByOid(). For now only one flag,
BGWORKER_BYPASS_ALLOWCONN, is defined, which allows the worker to ignore
datallowconn.
Diffstat (limited to 'src/backend/utils/init/postinit.c')
-rw-r--r-- | src/backend/utils/init/postinit.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c index d8f45b3c43f..09e0df290dd 100644 --- a/src/backend/utils/init/postinit.c +++ b/src/backend/utils/init/postinit.c @@ -66,7 +66,7 @@ static HeapTuple GetDatabaseTuple(const char *dbname); static HeapTuple GetDatabaseTupleByOid(Oid dboid); static void PerformAuthentication(Port *port); -static void CheckMyDatabase(const char *name, bool am_superuser); +static void CheckMyDatabase(const char *name, bool am_superuser, bool override_allow_connections); static void InitCommunication(void); static void ShutdownPostgres(int code, Datum arg); static void StatementTimeoutHandler(void); @@ -290,7 +290,7 @@ PerformAuthentication(Port *port) * CheckMyDatabase -- fetch information from the pg_database entry for our DB */ static void -CheckMyDatabase(const char *name, bool am_superuser) +CheckMyDatabase(const char *name, bool am_superuser, bool override_allow_connections) { HeapTuple tup; Form_pg_database dbform; @@ -326,7 +326,7 @@ CheckMyDatabase(const char *name, bool am_superuser) /* * Check that the database is currently allowing connections. */ - if (!dbform->datallowconn) + if (!dbform->datallowconn && !override_allow_connections) ereport(FATAL, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), errmsg("database \"%s\" is not currently accepting connections", @@ -563,7 +563,7 @@ BaseInit(void) */ void InitPostgres(const char *in_dbname, Oid dboid, const char *username, - Oid useroid, char *out_dbname) + Oid useroid, char *out_dbname, bool override_allow_connections) { bool bootstrap = IsBootstrapProcessingMode(); bool am_superuser; @@ -1006,7 +1006,7 @@ InitPostgres(const char *in_dbname, Oid dboid, const char *username, * user is a superuser, so the above stuff has to happen first.) */ if (!bootstrap) - CheckMyDatabase(dbname, am_superuser); + CheckMyDatabase(dbname, am_superuser, override_allow_connections); /* * Now process any command-line switches and any additional GUC variable |