HEAPTUPLE_RECENTLY_DEAD, /* tuple is dead, but not deletable yet */ It is a tuple which has been deleted AND committed but before the delete there is a transaction started but not committed. Let call this transaction as Transaction A.
if we create index on this time, Let's call this index as Index Aļ¼ it still index this record. my question is why need this. The only reason I can think out (maybe also not reasonable enough) is: If we index like this and the isolate level of transaction A is serializableļ¼ it is possible that the query in transaction A can use Index A since it contains the snapshot data when the transaction A was began. this reason may be not reasonable enough is because the transaction A may be should not see the index A at all.