24#define InvalidMultiXactId ((MultiXactId) 0)
25#define FirstMultiXactId ((MultiXactId) 1)
26#define MaxMultiXactId ((MultiXactId) 0xFFFFFFFF)
28#define MultiXactIdIsValid(multi) ((multi) != InvalidMultiXactId)
30#define MaxMultiXactOffset ((MultiXactOffset) 0xFFFFFFFF)
49#define MaxMultiXactStatus MultiXactStatusUpdate
52#define ISUPDATE_from_mxstatus(status) \
53 ((status) > MultiXactStatusForUpdate)
68#define XLOG_MULTIXACT_ZERO_OFF_PAGE 0x00
69#define XLOG_MULTIXACT_ZERO_MEM_PAGE 0x10
70#define XLOG_MULTIXACT_CREATE_ID 0x20
71#define XLOG_MULTIXACT_TRUNCATE_ID 0x30
81#define SizeOfMultiXactCreate (offsetof(xl_multixact_create, members))
96#define SizeOfMultiXactTruncate (sizeof(xl_multixact_truncate))
112 bool from_pgupgrade,
bool isLockOnly);
140 Oid newOldestMultiDB);
TransactionId MultiXactId
#define FLEXIBLE_ARRAY_MEMBER
void MultiXactShmemInit(void)
MultiXactId MultiXactIdExpand(MultiXactId multi, TransactionId xid, MultiXactStatus status)
void ReadMultiXactIdRange(MultiXactId *oldest, MultiXactId *next)
bool MultiXactIdPrecedes(MultiXactId multi1, MultiXactId multi2)
void multixact_redo(XLogReaderState *record)
@ MultiXactStatusForShare
@ MultiXactStatusForNoKeyUpdate
@ MultiXactStatusNoKeyUpdate
@ MultiXactStatusForUpdate
@ MultiXactStatusForKeyShare
int multixactoffsetssyncfiletag(const FileTag *ftag, char *path)
void multixact_twophase_postcommit(TransactionId xid, uint16 info, void *recdata, uint32 len)
void MultiXactSetNextMXact(MultiXactId nextMulti, MultiXactOffset nextMultiOffset)
void multixact_twophase_recover(TransactionId xid, uint16 info, void *recdata, uint32 len)
void AtPrepare_MultiXact(void)
bool MultiXactIdPrecedesOrEquals(MultiXactId multi1, MultiXactId multi2)
void MultiXactAdvanceOldest(MultiXactId oldestMulti, Oid oldestMultiDB)
bool MultiXactIdIsRunning(MultiXactId multi, bool isLockOnly)
void MultiXactIdSetOldestMember(void)
void multixact_desc(StringInfo buf, XLogReaderState *record)
void PostPrepare_MultiXact(TransactionId xid)
Size MultiXactShmemSize(void)
void multixact_twophase_postabort(TransactionId xid, uint16 info, void *recdata, uint32 len)
void MultiXactGetCheckptMulti(bool is_shutdown, MultiXactId *nextMulti, MultiXactOffset *nextMultiOffset, MultiXactId *oldestMulti, Oid *oldestMultiDB)
void SetMultiXactIdLimit(MultiXactId oldest_datminmxid, Oid oldest_datoid, bool is_startup)
int multixactmemberssyncfiletag(const FileTag *ftag, char *path)
MultiXactId GetOldestMultiXactId(void)
void CheckPointMultiXact(void)
MultiXactId MultiXactIdCreateFromMembers(int nmembers, MultiXactMember *members)
char * mxid_to_string(MultiXactId multi, int nmembers, MultiXactMember *members)
int MultiXactMemberFreezeThreshold(void)
void MultiXactAdvanceNextMXact(MultiXactId minMulti, MultiXactOffset minMultiOffset)
MultiXactId ReadNextMultiXactId(void)
void BootStrapMultiXact(void)
MultiXactId MultiXactIdCreate(TransactionId xid1, MultiXactStatus status1, TransactionId xid2, MultiXactStatus status2)
void TruncateMultiXact(MultiXactId newOldestMulti, Oid newOldestMultiDB)
struct MultiXactMember MultiXactMember
const char * multixact_identify(uint8 info)
void AtEOXact_MultiXact(void)
struct xl_multixact_truncate xl_multixact_truncate
void StartupMultiXact(void)
struct xl_multixact_create xl_multixact_create
int GetMultiXactIdMembers(MultiXactId multi, MultiXactMember **members, bool from_pgupgrade, bool isLockOnly)
MultiXactMember members[FLEXIBLE_ARRAY_MEMBER]
MultiXactOffset startTruncMemb
MultiXactOffset endTruncMemb
MultiXactId startTruncOff