On 3/5/23 07:58, Adrian Klaver wrote:
On 3/5/23 06:49, jack...@gmail.com wrote:
Here are the comments in src/include/utils/snapshot.h.
/*
* For normal MVCC snapshot this contains the all xact IDs that are in
* progress, unless the snapshot was taken during recovery in which case
* it's empty. For historic MVCC snapshots, the meaning is inverted, i.e.
* it contains *committed* transactions between xmin and xmax.
*
* note: all ids in xip[] satisfy xmin <= xip[i] < xmax
*/
TransactionId *xip;
I can't understand the historic MVCC snapshots? can you give me a scenario
to describe this?

 From the same file:


/*
  * A tuple is visible iff it follows the rules of SNAPSHOT_MVCC, but
  * supports being called in timetravel context (for decoding catalog
  * contents in the context of logical decoding).
          */
SNAPSHOT_HISTORIC_MVCC,

Also:

typedef struct SnapshotData *Snapshot;

#define InvalidSnapshot         ((Snapshot) NULL)

/*
 * Struct representing all kind of possible snapshots.
 *
 * There are several different kinds of snapshots:
 * * Normal MVCC snapshots
 * * MVCC snapshots taken during recovery (in Hot-Standby mode)
 * * Historic MVCC snapshots used during logical decoding
 * * snapshots passed to HeapTupleSatisfiesDirty()
 * * snapshots passed to HeapTupleSatisfiesNonVacuumable()
 * * snapshots used for SatisfiesAny, Toast, Self where no members are
 *       accessed.
 *
 * TODO: It's probably a good idea to split this struct using a NodeTag
 * similar to how parser and executor nodes are handled, with one type for
 * each different kind of snapshot to avoid overloading the meaning of
 * individual fields.
 */


------------------------------------------------------------------------
jack...@gmail.com


--
Adrian Klaver
adrian.kla...@aklaver.com



Reply via email to