I noticed that the "Restoring database schemas in the new cluster" part of
pg_upgrade can take a while if you have many databases, so I experimented
with a couple different settings to see if there are any easy ways to speed
it up.  The FILE_COPY strategy for CREATE DATABASE helped quite
significantly on my laptop.  For ~3k empty databases, this step went from
~100 seconds to ~30 seconds with the attached patch.  I see commit ad43a41
made a similar change for initdb, so there might even be an argument for
back-patching this to v15 (where STRATEGY was introduced).  One thing I
still need to verify is that this doesn't harm anything when there are lots
of objects in the databases, i.e., more WAL generated during many
concurrent CREATE-DATABASE-induced checkpoints.

Thoughts?

-- 
nathan
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index e324070828..bc9fef4198 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -3126,7 +3126,9 @@ dumpDatabase(Archive *fout)
         */
        if (dopt->binary_upgrade)
        {
-               appendPQExpBuffer(creaQry, "CREATE DATABASE %s WITH TEMPLATE = 
template0 OID = %u",
+               appendPQExpBuffer(creaQry,
+                                                 "CREATE DATABASE %s WITH 
TEMPLATE = template0 "
+                                                 "OID = %u STRATEGY = 
FILE_COPY",
                                                  qdatname, dbCatId.oid);
        }
        else

Reply via email to