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.