- Updates cause new versions of rows, and index entries for each.
- Heap rows have xmin, xmax, so we can distinguish visible from invisible rows.
- Index rows don't have this information, so on an index scan, we have to
fetch and examine all qualifying rows, some (many?) of which
may be obsolete.
- The PK index is logically unique, but not physically
unique. Keys are duplicated due to row versions.
- select * from T where id = 2: Find all the rows with id = 2.
At most one should be visible.