• Tom Lane's avatar
    Add testing to detect errors of omission in "pin" dependency creation. · 8be8510c
    Tom Lane authored
    It's essential that initdb.c's setup_depend() scan each system catalog
    that could contain objects that need to have "p" (pin) entries in pg_depend
    or pg_shdepend.  Forgetting to add that, either when a catalog is first
    invented or when it first acquires DATA() entries, is an obvious bug
    hazard.  We can detect such omissions at reasonable cost by probing every
    OID-containing system catalog to see whether the lowest-numbered OID in it
    is pinned.  If so, the catalog must have been properly accounted for in
    setup_depend().  If the lowest OID is above FirstNormalObjectId then the
    catalog must have been empty at the end of initdb, so it doesn't matter.
    There are a small number of catalogs whose first entry is made later in
    initdb than setup_depend(), resulting in nonempty expected output of the
    test, but these can be manually inspected to see that they are OK.  Any
    future mistake of this ilk will manifest as a new entry in the test's
    output.
    
    Since pg_conversion is already in the test's output, add it to the set of
    catalogs scanned by setup_depend().  That has no effect today (hence, no
    catversion bump here) but it will protect us if we ever do add pin-worthy
    conversions.
    
    This test is very much like the catalog sanity checks embodied in
    opr_sanity.sql and type_sanity.sql, but testing pg_depend doesn't seem to
    fit naturally into either of those scripts' charters.  Hence, invent a new
    test script misc_sanity.sql, which can be a home for this as well as tests
    on any other catalogs we might want in future.
    
    Discussion: https://postgr.es/m/8068.1498155068@sss.pgh.pa.us
    8be8510c
misc_sanity.out 3.28 KB