While editing Bruce's README.HOT documentation I ran into a problem. I had idly added the following text after thinking about the different sorts of snapshots we use:
--- Another unpleasant consequence is that it is no longer very meaningful to use SnapshotAny in an index scan: if the index was created more recently than the last vacuum, it's possible that some of the visited tuples do not match the index entry they are linked to. This does not seem to be a fatal objection in practice, since there are few users of SnapshotAny and they all use seqscans. --- However, a quick grep to confirm that turned up a problem: CLUSTER uses SnapshotAny with an indexscan. This essentially means that CLUSTER might fetch recently-dead tuples out of order, because it finds them attached to an index HOT chain that's for a different index key value. I think that this is not a fatal objection; the out-of-order-ness is limited and won't be seen at all by transactions with snapshots postdating the CLUSTER, and CLUSTER can't guarantee the ordering will stay pristine for long anyway. But it's a bit worrisome. Does anyone see a bigger problem here than I do? BTW, the proposed HOT code in indexam.c that special-cases SnapshotAny is a crock ... regards, tom lane ---------------------------(end of broadcast)--------------------------- TIP 2: Don't 'kill -9' the postmaster