• Michael Paquier's avatar
    Avoid using tuple from syscache for update of pg_database.datfrozenxid · 947789f1
    Michael Paquier authored
    pg_database.datfrozenxid gets updated using an in-place update at the
    end of vacuum or autovacuum.  Since 96cdeae0, as pg_database has a toast
    relation, it is possible for a pg_database tuple to have toast values
    if there is a large set of ACLs in place.  In such a case, the in-place
    update would fail because of the flattening of the toast values done for
    the catcache entry fetched.  Instead of using a copy from the catcache,
    this changes the logic to fetch the copy of the tuple by directly
    scanning pg_database.
    
    Per the lack of complaints on the matter, no backpatch is done.  Note
    that before 96cdeae0, attempting to insert such a tuple to pg_database
    would cause a "row is too big" error, so the end-of-vacuum problem was
    not reachable.
    
    Author: Ashwin Agrawal, Junfeng Yang
    Discussion: https://postgr.es/m/DM5PR0501MB38800D9E4605BCA72DD35557CCE10@DM5PR0501MB3880.namprd05.prod.outlook.com
    947789f1
vacuum.c 66.4 KB