postgres-github.git / summary / log / commit / refs

commit    2018bd6167909f3de7405774527d1230397950e0
Author:   Daniel Gustafsson <dgustafsson@postgresql.org>
Date:     Wed May 06 10:38:01 2026 +0000

    Skip WAL for unlogged main fork during online checksum enable
    
    ProcessSingleRelationFork() unconditionally generated an FPI WAL
    record for every page of every relation when enabling checksums.
    Unlogged relations, which by definition never generate WAL for
    data changes, were not exempt which generated excessive WAL to
    be emitted.
    
    Fix by guarding the FPI WAL record call with RelationNeedsWAL()
    to avoid emitting WAL for unlogged main forks.  Unlogged pages
    are still dirtied to ensure the checksum is written to disk at
    the next checkpoint.  The init fork remains WAL-logged even for
    unlogged relations, as it's needed on the standby to materialize
    the relation after promotion (see ResetUnloggedRelations()).
    Skipping init-fork WAL would leave the standby with a stale init
    fork that, once copied to the main fork on promotion, would fail
    checksum verification on every read of the unlogged relation.
    
    A test which creates an unlogged table with an index, enables
    checksums, promotes the standby, and verifies that the unlogged
    relation and its indexes are still readable post-promotion has
    been added.
    
    Author: Satyanarayana Narlapuram <satyanarlapuram@gmail.com>
    Reviewed-by: Daniel Gustafsson <daniel@yesql.se>
    Reviewed-by: Ayush Tiwari <ayushtiwari.slg01@gmail.com>
    Discussion: https://postgr.es/m/CAHg+QDeGrpZbNZdLjd_T4b43xKEEXZN0HGhkFm-1bkBdyzK7AQ@mail.gmail.com

[parent: 43dc21f76fff]