]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Allow background workers to connect to no particular database.
authorRobert Haas <rhaas@postgresql.org>
Thu, 25 Jun 2015 19:52:13 +0000 (15:52 -0400)
committerRobert Haas <rhaas@postgresql.org>
Thu, 25 Jun 2015 20:55:02 +0000 (16:55 -0400)
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

index 9ae956759e9407b11bbb93a1d8c9874139a2b84d..dfa9231a42b06aebe03d5c6762c6aa83570cf1bf 100644 (file)
@@ -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.