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