• Michael Paquier's avatar
    Fix memory leak when de-toasting compressed values in VACUUM FULL/CLUSTER · fb0f5f01
    Michael Paquier authored
    VACUUM FULL and CLUSTER can be used to enforce the use of the existing
    compression method of a toastable column if a value currently stored is
    compressed with a method that does not match the column's defined
    method.  The code in charge of decompressing and recompressing toast
    values at rewrite left around the detoasted values, causing an
    accumulation of memory allocated in TopTransactionContext.
    
    When processing large relations, this could cause the system to run out
    of memory.  The detoasted values are not needed once their tuple is
    rewritten, and this commit ensures that the necessary cleanup happens.
    
    Issue introduced by bbe0a81d.  The comments of the area are reordered a
    bit while on it.
    
    Reported-by: Andres Freund
    Analyzed-by: Andres Freund
    Author: Michael Paquier
    Reviewed-by: Dilip Kumar
    Discussion: https://postgr.es/m/20210521211929.pcehg6f23icwstdb@alap3.anarazel.de
    fb0f5f01
heapam_handler.c 75.6 KB