Process shared_preload_libraries in single-user mode.
authorJeff Davis <jdavis@postgresql.org>
Fri, 15 Jul 2022 19:24:10 +0000 (12:24 -0700)
committerJeff Davis <jdavis@postgresql.org>
Wed, 20 Jul 2022 17:15:47 +0000 (10:15 -0700)
Without processing shared_preload_libraries, it's impossible to
recover if custom WAL resource managers are needed. It may also pose a
problem running VACUUM on a table with a custom AM, if the module
implementing the AM is expecting to be loaded by
shared_preload_libraries.

The reason this wasn't done before was just the general principle to
do fewer things in single-user mode. But it's easy enough to just set
shared_preload_libraries to empty, for the same effect.

Discussion: https://postgr.es/m/9decc18a42634f8a2f15c97a385a0f51a752f396.camel%40j-davis.com
Reviewed-by: Tom Lane, Andres Freund
Backpatch-through: 15

src/backend/tcop/postgres.c

index 6f18b6885697c28ba25ad7576ad3b5a5ab38a2c2..8ba1c170f02773d8c5d02953b717b1111a7b1240 100644 (file)
@@ -3933,9 +3933,32 @@ PostgresSingleUserMain(int argc, char *argv[],
    /* read control file (error checking and contains config ) */
    LocalProcessControlFile(false);
 
+   /*
+    * process any libraries that should be preloaded at postmaster start
+    */
+   process_shared_preload_libraries();
+
    /* Initialize MaxBackends */
    InitializeMaxBackends();
 
+   /*
+    * Give preloaded libraries a chance to request additional shared memory.
+    */
+   process_shmem_requests();
+
+   /*
+    * Now that loadable modules have had their chance to request additional
+    * shared memory, determine the value of any runtime-computed GUCs that
+    * depend on the amount of shared memory required.
+    */
+   InitializeShmemGUCs();
+
+   /*
+    * Now that modules have been loaded, we can process any custom resource
+    * managers specified in the wal_consistency_checking GUC.
+    */
+   InitializeWalConsistencyChecking();
+
    CreateSharedMemoryAndSemaphores();
 
    /*