• B
    I checked the alter table code, and started suspecting the relation · abb1b3e7
    Bruce Momjian 提交于
    cache.  I found if I manually added a line to flush the whole relation
    cache, the assert error disappeared.  Looking through the code, I found
    that the relation cache is flushed at the end of each query if the
    reference count is zero for the relation.  However, printf's showed that
    the rd_relcnt(reference count) for the accessed query was not returning
    to zero after each query.
    
    It turns out the parser was doing a heap_ropen in parser/analyze.c to
    get information about the table's columns, but was not doing a
    heap_close.
    
    This was causing the query after the ALTER TABLE ADD to see the old
    table structure, and the executor's assert was reporting the problem.
    abb1b3e7
Makefile.global 9.5 KB