postgres.git / summary / log / commit / refs

commit    d66b67fe21e11d8f1c7ac7d8445f8468fbc9222f
Author:   Robert Haas <rhaas@postgresql.org>
Date:     Thu Jun 25 19:52:13 2015 +0000
First released in: 9.5.0, 9.3.10, 9.4.5

    Allow background workers to connect to no particular database.
    
    The documentation claims that this is supported, but it didn't
    actually work.  Fix that.
    
    Reported by Pavel Stehule; patch by me.


src/backend/utils/init/postinit.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c index 9ae956759e9..dfa9231a42b 100644 --- a/src/backend/utils/init/postinit.c +++ b/src/backend/utils/init/postinit.c @@ -779,7 +779,7 @@ InitPostgres(const char *in_dbname, Oid dboid, const char *username, /* take database name from the caller, just for paranoia */ strlcpy(dbname, in_dbname, sizeof(dbname)); } - else + else if (OidIsValid(dboid)) { /* caller specified database by OID */ HeapTuple tuple; @@ -799,6 +799,18 @@ InitPostgres(const char *in_dbname, Oid dboid, const char *username, if (out_dbname) strcpy(out_dbname, dbname); } + else + { + /* + * If this is a background worker not bound to any particular + * database, we're done now. Everything that follows only makes + * sense if we are bound to a specific database. We do need to + * close the transaction we started before returning. + */ + if (!bootstrap) + CommitTransactionCommand(); + return; + } /* * Now, take a writer's lock on the database we are trying to connect to. [parent: 834aa56ea16f]