pg_prewarm: Allow autoprewarm to use more than 1GB to dump blocks.
authorRobert Haas <[email protected]>
Fri, 6 Jun 2025 12:18:27 +0000 (08:18 -0400)
committerRobert Haas <[email protected]>
Fri, 6 Jun 2025 12:18:27 +0000 (08:18 -0400)
Reported-by: Daria Shanina <[email protected]>
Author: Daria Shanina <[email protected]>
Author: Robert Haas <[email protected]>
Backpatch-through: 13

contrib/pg_prewarm/autoprewarm.c

index c52f4d4dc9ea2b2a08ce1f8e206412e2059147eb..c01b9c7e6a4d669b682ac04286c9168387152431 100644 (file)
@@ -693,8 +693,15 @@ apw_dump_now(bool is_bgworker, bool dump_unlogged)
        return 0;
    }
 
-   block_info_array =
-       (BlockInfoRecord *) palloc(sizeof(BlockInfoRecord) * NBuffers);
+   /*
+    * With sufficiently large shared_buffers, allocation will exceed 1GB, so
+    * allow for a huge allocation to prevent outright failure.
+    *
+    * (In the future, it might be a good idea to redesign this to use a more
+    * memory-efficient data structure.)
+    */
+   block_info_array = (BlockInfoRecord *)
+       palloc_extended((sizeof(BlockInfoRecord) * NBuffers), MCXT_ALLOC_HUGE);
 
    for (num_blocks = 0, i = 0; i < NBuffers; i++)
    {