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();
 
        /*