• Andres Freund's avatar
    tableam: Don't assume that every AM uses md.c style storage. · 7f44ede5
    Andres Freund authored
    Previously various parts of the code routed size requests through
    RelationGetNumberOfBlocks[InFork]. That works if md.c is used by the
    AM, but not otherwise.
    
    Add a tableam callback to return the size of the table. As not every
    AM will use postgres' BLCKSZ, have it return bytes, and have
    RelationGetNumberOfBlocksInFork() round the byte size up into blocks.
    
    To allow code outside of the AM to determine the actual relation size
    map InvalidForkNumber the total size of a relation, as not every AM
    might just need the postgres defined forks.
    
    A few users of RelationGetNumberOfBlocks() ought to be converted away
    from that. One case, the use of it to determine whether a tid is
    valid, will be fixed in a follow up commit. Others will have to wait
    for v13.
    
    Author: Andres Freund
    Discussion: https://postgr.es/m/20190423225201.3bbv6tbqzkb5w7cw@alap3.anarazel.de
    7f44ede5
tableamapi.c 4.29 KB