postgres.git / summary / log / commit / refs

commit    4adbaa36ca8b0042ce24be187542e846ad3a7e51
Author:   Robert Haas <rhaas@postgresql.org>
Date:     Fri Jun 06 12:18:15 2025 +0000
First released in: 18.0, 13.22, 14.19, 15.14, 16.10, 17.6

    pg_prewarm: Allow autoprewarm to use more than 1GB to dump blocks.
    
    Reported-by: Daria Shanina <vilensipkdm@gmail.com>
    Author: Daria Shanina <vilensipkdm@gmail.com>
    Author: Robert Haas <robertmhaas@gmail.com>
    Backpatch-through: 13


contrib/pg_prewarm/autoprewarm.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/contrib/pg_prewarm/autoprewarm.c b/contrib/pg_prewarm/autoprewarm.c index 31be24fc9c3..65d3ee2e163 100644 --- a/contrib/pg_prewarm/autoprewarm.c +++ b/contrib/pg_prewarm/autoprewarm.c @@ -597,8 +597,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++) { [parent: 626b439e367d]