jeff(at)pgexperts(dot)com writes:
> [ $SUBJECT ]
This is not a bug; please read the description of pg_class:
relhaspkey bool True if the table has (or once had) a primary key
The note at the bottom of the page explains why:
Several of the Boolean flags in pg_class are maintained lazily: they are
guaranteed to be true if that's the correct state, but may not be reset to
false immediately when the condition is no longer true. For example,
relhasindex is set by CREATE INDEX, but it is never cleared by DROP
INDEX. Instead, VACUUM clears relhasindex if it finds the table has no
indexes. This arrangement avoids race conditions and improves concurrency.
regards, tom lane