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.

Reply via email to