241#define SerializedTransactionStateHeaderSize \
242 offsetof(SerializedTransactionState, parallelCurrentXids)
252 .topXidLogged =
false,
349 const char *stmtType);
654 errmsg(
"cannot assign transaction IDs during a parallel operation")));
666 size_t parentOffset = 0;
671 parents[parentOffset++] = p;
679 while (parentOffset != 0)
845 errmsg(
"cannot modify data in a parallel worker")));
984 middle = low + (high - low) / 2;
988 else if (
probe < xid)
1022 middle = low + (high - low) / 2;
1120 errmsg(
"cannot start commands during a parallel operation")));
1128 errmsg(
"cannot have more than 2^32-2 commands in a transaction")));
1197 "TransactionAbortContext",
1210 "TopTransactionContext",
1273 "CurTransactionContext",
1330 bool RelcacheInitFileInval =
false;
1349 &RelcacheInitFileInval);
1367 elog(
ERROR,
"cannot commit a transaction that deleted files but has no xid");
1396 RelcacheInitFileInval);
1460 RelcacheInitFileInval,
1709 errmsg(
"maximum number of committed subtransactions (%d) exceeded",
1807 elog(
PANIC,
"cannot abort transaction %u, it was already committed",
2260 elog(
WARNING,
"CommitTransaction while in %s state",
2308 elog(
WARNING,
"parallelModeLevel is %d not 1 at end of parallel worker transaction",
2314 elog(
WARNING,
"parallelModeLevel is %d not 0 at end of transaction",
2545 elog(
WARNING,
"PrepareTransaction while in %s state",
2631 errmsg(
"cannot PREPARE a transaction that has operated on temporary objects")));
2641 errmsg(
"cannot PREPARE a transaction that has exported snapshots")));
2897 elog(
WARNING,
"AbortTransaction while in %s state",
3039 elog(
FATAL,
"CleanupTransaction: unexpected state %s",
3135 elog(
ERROR,
"StartTransactionCommand: unexpected state %s",
3215 elog(
FATAL,
"CommitTransactionCommand: unexpected state %s",
3381 elog(
ERROR,
"CommitTransactionCommand: unexpected state %s",
3679 errmsg(
"%s cannot run inside a transaction block",
3689 errmsg(
"%s cannot run inside a subtransaction",
3699 errmsg(
"%s cannot be executed from a function or procedure",
3705 elog(
FATAL,
"cannot prevent transaction chain");
3771 errmsg(
"%s can only be used in transaction blocks",
3979 errmsg(
"there is already a transaction in progress")));
3996 elog(
FATAL,
"BeginTransactionBlock: unexpected state %s",
4070 bool result =
false;
4093 errmsg(
"%s can only be used in transaction blocks",
4094 "COMMIT AND CHAIN")));
4098 errmsg(
"there is no transaction in progress")));
4121 elog(
FATAL,
"EndTransactionBlock: unexpected state %s",
4128 elog(
FATAL,
"EndTransactionBlock: unexpected state %s",
4146 elog(
FATAL,
"EndTransactionBlock: unexpected state %s",
4155 elog(
FATAL,
"EndTransactionBlock: unexpected state %s",
4172 errmsg(
"%s can only be used in transaction blocks",
4173 "COMMIT AND CHAIN")));
4177 errmsg(
"there is no transaction in progress")));
4188 errmsg(
"cannot commit during a parallel operation")));
4205 elog(
FATAL,
"EndTransactionBlock: unexpected state %s",
4265 elog(
FATAL,
"UserAbortTransactionBlock: unexpected state %s",
4274 elog(
FATAL,
"UserAbortTransactionBlock: unexpected state %s",
4295 errmsg(
"%s can only be used in transaction blocks",
4296 "ROLLBACK AND CHAIN")));
4300 errmsg(
"there is no transaction in progress")));
4311 errmsg(
"cannot abort during a parallel operation")));
4328 elog(
FATAL,
"UserAbortTransactionBlock: unexpected state %s",
4410 errmsg(
"cannot define savepoints during a parallel operation")));
4446 errmsg(
"%s can only be used in transaction blocks",
4468 elog(
FATAL,
"DefineSavepoint: unexpected state %s",
4497 errmsg(
"cannot release savepoints during a parallel operation")));
4507 errmsg(
"savepoint \"%s\" does not exist",
name)));
4515 errmsg(
"%s can only be used in transaction blocks",
4516 "RELEASE SAVEPOINT")));
4544 elog(
FATAL,
"ReleaseSavepoint: unexpected state %s",
4549 for (target = s; target; target = target->
parent)
4558 errmsg(
"savepoint \"%s\" does not exist",
name)));
4564 errmsg(
"savepoint \"%s\" does not exist within current savepoint level",
name)));
4606 errmsg(
"cannot rollback to savepoints during a parallel operation")));
4618 errmsg(
"savepoint \"%s\" does not exist",
name)));
4626 errmsg(
"%s can only be used in transaction blocks",
4627 "ROLLBACK TO SAVEPOINT")));
4653 elog(
FATAL,
"RollbackToSavepoint: unexpected state %s",
4658 for (target = s; target; target = target->
parent)
4667 errmsg(
"savepoint \"%s\" does not exist",
name)));
4673 errmsg(
"savepoint \"%s\" does not exist within current savepoint level",
name)));
4690 elog(
FATAL,
"RollbackToSavepoint: unexpected state %s",
4702 elog(
FATAL,
"RollbackToSavepoint: unexpected state %s",
4772 elog(
FATAL,
"BeginInternalSubTransaction: unexpected state %s",
4802 elog(
ERROR,
"ReleaseCurrentSubTransaction: unexpected state %s",
4855 elog(
FATAL,
"RollbackAndReleaseCurrentSubTransaction: unexpected state %s",
5058 elog(
FATAL,
"invalid transaction block state: %s",
5095 elog(
WARNING,
"StartSubTransaction while in %s state",
5134 elog(
WARNING,
"CommitSubTransaction while in %s state",
5149 elog(
WARNING,
"parallelModeLevel is %d not 0 at end of subtransaction",
5305 elog(
WARNING,
"AbortSubTransaction while in %s state",
5413 elog(
WARNING,
"CleanupSubTransaction while in %s state",
5461 errmsg(
"cannot have more than 2^32-1 subtransactions in a transaction")));
5510 elog(
FATAL,
"PopTransaction with no parent");
5646 tstate->currentFullTransactionId;
5712 (
errmsg_internal(
"%s(%d) name: %s; blockState: %s; state: %s, xid/subid/cid: %u/%u/%u%s%s",
5741 return "INPROGRESS";
5743 return "IMPLICIT_INPROGRESS";
5745 return "PARALLEL_INPROGRESS";
5753 return "ABORT_PENDING";
5759 return "SUBINPROGRESS";
5761 return "SUBRELEASE";
5767 return "SUBABORT_END";
5769 return "SUBABORT_PENDING";
5771 return "SUBRESTART";
5773 return "SUBABORT_RESTART";
5775 return "UNRECOGNIZED";
5792 return "INPROGRESS";
5800 return "UNRECOGNIZED";
5844 const char *twophase_gid)
5869 xlrec.xact_time = commit_time;
6014 const char *twophase_gid)
6040 xlrec.xact_time = abort_time;
6172 commit_time =
parsed->origin_timestamp;
6174 commit_time =
parsed->xact_time;
6178 commit_time, origin_id);
6469 elog(
PANIC,
"xact_redo: unknown op code %u", info);
void pgaio_error_cleanup(void)
void AtEOXact_Aio(bool is_commit)
void AtCommit_Notify(void)
void AtAbort_Notify(void)
void PreCommit_Notify(void)
void AtSubAbort_Notify(void)
void AtPrepare_Notify(void)
void AtSubCommit_Notify(void)
#define pg_write_barrier()
void ParallelWorkerReportLastRecEnd(XLogRecPtr last_xlog_end)
bool ParallelContextActive(void)
void AtEOSubXact_Parallel(bool isCommit, SubTransactionId mySubId)
void AtEOXact_Parallel(bool isCommit)
void AtEOXact_LogicalRepWorkers(bool isCommit)
TimestampTz GetCurrentTimestamp(void)
void pgstat_progress_end_command(void)
void pgstat_report_xact_timestamp(TimestampTz tstamp)
void AtEOXact_LargeObject(bool isCommit)
void AtEOSubXact_LargeObject(bool isCommit, SubTransactionId mySubid, SubTransactionId parentSubid)
static void cleanup(void)
void AtEOXact_Buffers(bool isCommit)
#define TopSubTransactionId
#define PG_USED_FOR_ASSERTS_ONLY
#define InvalidSubTransactionId
#define Assert(condition)
#define FLEXIBLE_ARRAY_MEMBER
uint32 LocalTransactionId
void AtEOXact_ComboCid(void)
void TransactionTreeSetCommitTsData(TransactionId xid, int nsubxids, TransactionId *subxids, TimestampTz timestamp, ReplOriginId nodeid)
bool ConditionVariableCancelSleep(void)
void AtEOXact_HashTables(bool isCommit)
void AtEOSubXact_HashTables(bool isCommit, int nestDepth)
bool message_level_is_interesting(int elevel)
int errcode(int sqlerrcode)
int int errmsg_internal(const char *fmt,...) pg_attribute_printf(1
#define ereport(elevel,...)
void AtEOXact_Files(bool isCommit)
void AtEOSubXact_Files(bool isCommit, SubTransactionId mySubid, SubTransactionId parentSubid)
#define palloc_array(type, count)
volatile uint32 CritSectionCount
int NewGUCNestLevel(void)
void AtEOXact_GUC(bool isCommit, int nestLevel)
double log_xact_sample_rate
#define IsParallelWorker()
void ResetReindexState(int nestLevel)
void PostPrepare_Inval(void)
void LogLogicalInvalidations(void)
void AcceptInvalidationMessages(void)
int xactGetCommittedInvalidationMessages(SharedInvalidationMessage **msgs, bool *RelcacheInitFileInval)
void AtEOXact_Inval(bool isCommit)
void AtEOSubXact_Inval(bool isCommit)
void CommandEndInvalidationMessages(void)
void ProcessCommittedInvalidationMessages(SharedInvalidationMessage *msgs, int nmsgs, bool RelcacheInitFileInval, Oid dbid, Oid tsid)
void AtEOXact_ApplyLauncher(bool isCommit)
void XactLockTableDelete(TransactionId xid)
void XactLockTableInsert(TransactionId xid)
void PostPrepare_Locks(FullTransactionId fxid)
void VirtualXactLockTableInsert(VirtualTransactionId vxid)
void AtPrepare_Locks(void)
#define InvalidLocalTransactionId
void ResetLogicalStreamingState(void)
void AtEOXact_LogicalCtl(void)
bool LWLockAcquire(LWLock *lock, LWLockMode mode)
void LWLockRelease(LWLock *lock)
void LWLockReleaseAll(void)
char * MemoryContextStrdup(MemoryContext context, const char *string)
void * MemoryContextAlloc(MemoryContext context, Size size)
bool MemoryContextIsEmpty(MemoryContext context)
void MemoryContextReset(MemoryContext context)
void * MemoryContextAllocZero(MemoryContext context, Size size)
MemoryContext TopTransactionContext
void * repalloc(void *pointer, Size size)
void pfree(void *pointer)
MemoryContext TopMemoryContext
MemoryContext CurTransactionContext
MemoryContext CurrentMemoryContext
void MemoryContextDelete(MemoryContext context)
void DropRelationFiles(RelFileLocator *delrels, int ndelrels, bool isRedo)
#define AllocSetContextCreate
#define ALLOCSET_DEFAULT_SIZES
#define RESUME_INTERRUPTS()
#define START_CRIT_SECTION()
#define HOLD_INTERRUPTS()
#define END_CRIT_SECTION()
void GetUserIdAndSecContext(Oid *userid, int *sec_context)
void SetUserIdAndSecContext(Oid userid, int sec_context)
void PostPrepare_MultiXact(FullTransactionId fxid)
void AtPrepare_MultiXact(void)
void AtEOXact_MultiXact(void)
void AtEOSubXact_Namespace(bool isCommit, SubTransactionId mySubid, SubTransactionId parentSubid)
void AtEOXact_Namespace(bool isCommit, bool parallel)
ReplOriginXactState replorigin_xact_state
void replorigin_advance(ReplOriginId node, XLogRecPtr remote_commit, XLogRecPtr local_commit, bool go_backward, bool wal_log)
void replorigin_session_advance(XLogRecPtr remote_commit, XLogRecPtr local_commit)
#define InvalidReplOriginId
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
double pg_prng_double(pg_prng_state *state)
pg_prng_state pg_global_prng_state
static char buf[DEFAULT_XLOG_SEG_SIZE]
void AtPrepare_PgStat(void)
void pgstat_execute_transactional_drops(int ndrops, struct xl_xact_stats_item *items, bool is_redo)
void AtEOXact_PgStat(bool isCommit, bool parallel)
void PostPrepare_PgStat(void)
int pgstat_get_transactional_drops(bool isCommit, xl_xact_stats_item **items)
void AtEOSubXact_PgStat(bool isCommit, int nestDepth)
#define qsort(a, b, c, d)
void AtAbort_Portals(void)
void AtSubAbort_Portals(SubTransactionId mySubid, SubTransactionId parentSubid, ResourceOwner myXactOwner, ResourceOwner parentXactOwner)
bool PreCommit_Portals(bool isPrepare)
void AtSubCommit_Portals(SubTransactionId mySubid, SubTransactionId parentSubid, int parentLevel, ResourceOwner parentXactOwner)
void AtCleanup_Portals(void)
void AtSubCleanup_Portals(SubTransactionId mySubid)
void PreCommit_CheckForSerializationFailure(void)
void PostPrepare_PredicateLocks(FullTransactionId fxid)
void AtPrepare_PredicateLocks(void)
void RegisterPredicateLockingXid(TransactionId xid)
#define DELAY_CHKPT_IN_COMMIT
#define PGPROC_MAX_CACHED_SUBXIDS
void XidCacheRemoveRunningXids(TransactionId xid, int nxids, const TransactionId *xids, TransactionId latestXid)
void ProcArrayEndTransaction(PGPROC *proc, TransactionId latestXid)
void RecordKnownAssignedTransactionIds(TransactionId xid)
void ProcArrayClearTransaction(PGPROC *proc)
void ProcArrayApplyXidAssignment(TransactionId topxid, int nsubxids, TransactionId *subxids)
void ExpireTreeKnownAssignedTransactionIds(TransactionId xid, int nsubxids, TransactionId *subxids, TransactionId max_xid)
void AtEOSubXact_RelationCache(bool isCommit, SubTransactionId mySubid, SubTransactionId parentSubid)
void AtEOXact_RelationCache(bool isCommit)
void AtPrepare_RelationMap(void)
void AtEOXact_RelationMap(bool isCommit, bool isParallelWorker)
void AtCCI_RelationMap(void)
ResourceOwner TopTransactionResourceOwner
ResourceOwner ResourceOwnerCreate(ResourceOwner parent, const char *name)
ResourceOwner CurrentResourceOwner
void ResourceOwnerRelease(ResourceOwner owner, ResourceReleasePhase phase, bool isCommit, bool isTopLevel)
void ResourceOwnerDelete(ResourceOwner owner)
ResourceOwner CurTransactionResourceOwner
@ RESOURCE_RELEASE_BEFORE_LOCKS
@ RESOURCE_RELEASE_AFTER_LOCKS
Size add_size(Size s1, Size s2)
Size mul_size(Size s1, Size s2)
LocalTransactionId GetNextLocalTransactionId(void)
void SnapBuildResetExportedSnapshotState(void)
void AtSubAbort_Snapshot(int level)
void AtEOXact_Snapshot(bool isCommit, bool resetXmin)
void AtSubCommit_Snapshot(int level)
bool XactHasExportedSnapshots(void)
void SnapshotSetCommandId(CommandId curcid)
void AtEOSubXact_SPI(bool isCommit, SubTransactionId mySubid)
bool SPI_inside_nonatomic_context(void)
void AtEOXact_SPI(bool isCommit)
void LockErrorCleanup(void)
bool stack_is_too_deep(void)
void StandbyReleaseLockTree(TransactionId xid, int nsubxids, TransactionId *subxids)
void LogStandbyInvalidations(int nmsgs, SharedInvalidationMessage *msgs, bool relcacheInitFileInval)
void AtSubCommit_smgr(void)
void AtSubAbort_smgr(void)
int smgrGetPendingDeletes(bool forCommit, RelFileLocator **ptr)
void PostPrepare_smgr(void)
void smgrDoPendingSyncs(bool isCommit, bool isParallelWorker)
void smgrDoPendingDeletes(bool isCommit)
void appendStringInfo(StringInfo str, const char *fmt,...)
void initStringInfo(StringInfo str)
TimestampTz origin_timestamp
FullTransactionId currentFullTransactionId
FullTransactionId topFullTransactionId
CommandId currentCommandId
TransactionId parallelCurrentXids[FLEXIBLE_ARRAY_MEMBER]
struct SubXactCallbackItem * next
SubTransactionId subTransactionId
FullTransactionId fullTransactionId
struct TransactionStateData * parent
MemoryContext priorContext
MemoryContext curTransactionContext
TransactionId * childXids
ResourceOwner curTransactionOwner
LocalTransactionId localTransactionId
struct XactCallbackItem * next
void SubTransSetParent(TransactionId xid, TransactionId parent)
void SyncRepWaitForLSN(XLogRecPtr lsn, bool commit)
void AtEOSubXact_on_commit_actions(bool isCommit, SubTransactionId mySubid, SubTransactionId parentSubid)
void PreCommit_on_commit_actions(void)
void AtEOXact_on_commit_actions(bool isCommit)
static void callback(struct sockaddr *addr, struct sockaddr *mask, void *unused)
void enable_timeout_after(TimeoutId id, int delay_ms)
void reschedule_timeouts(void)
void disable_timeout(TimeoutId id, bool keep_indicator)
void TransactionIdAsyncCommitTree(TransactionId xid, int nxids, TransactionId *xids, XLogRecPtr lsn)
TransactionId TransactionIdLatest(TransactionId mainxid, int nxids, const TransactionId *xids)
bool TransactionIdDidCommit(TransactionId transactionId)
void TransactionIdCommitTree(TransactionId xid, int nxids, TransactionId *xids)
void TransactionIdAbortTree(TransactionId xid, int nxids, TransactionId *xids)
static TransactionId ReadNextTransactionId(void)
#define InvalidTransactionId
#define TransactionIdEquals(id1, id2)
#define XidFromFullTransactionId(x)
#define TransactionIdIsValid(xid)
#define TransactionIdIsNormal(xid)
#define InvalidFullTransactionId
#define FullTransactionIdIsValid(x)
static bool TransactionIdPrecedes(TransactionId id1, TransactionId id2)
void AfterTriggerBeginXact(void)
void AfterTriggerEndSubXact(bool isCommit)
void AfterTriggerFireDeferred(void)
void AfterTriggerEndXact(bool isCommit)
void AfterTriggerBeginSubXact(void)
GlobalTransaction MarkAsPreparing(FullTransactionId fxid, const char *gid, TimestampTz prepared_at, Oid owner, Oid databaseid)
void PrepareRedoAdd(FullTransactionId fxid, char *buf, XLogRecPtr start_lsn, XLogRecPtr end_lsn, ReplOriginId origin_id)
void AtAbort_Twophase(void)
void PrepareRedoRemove(TransactionId xid, bool giveWarning)
void EndPrepare(GlobalTransaction gxact)
void StartPrepare(GlobalTransaction gxact)
void PostPrepare_Twophase(void)
void AtEOXact_TypeCache(void)
void AtEOSubXact_TypeCache(void)
void AdvanceNextFullTransactionIdPastXid(TransactionId xid)
FullTransactionId GetNewTransactionId(bool isSubXact)
static void pgstat_report_wait_end(void)
static bool CommitTransactionCommandInternal(void)
bool IsTransactionOrTransactionBlock(void)
void SerializeTransactionState(Size maxsize, char *start_address)
void ExitParallelMode(void)
static TimestampTz xactStartTimestamp
static bool currentCommandIdUsed
static void AtSubCommit_Memory(void)
void SaveTransactionCharacteristics(SavedTransactionCharacteristics *s)
static void CleanupSubTransaction(void)
void BeginInternalSubTransaction(const char *name)
static void AtStart_Memory(void)
FullTransactionId GetCurrentFullTransactionId(void)
void RestoreTransactionCharacteristics(const SavedTransactionCharacteristics *s)
static XactCallbackItem * Xact_callbacks
void WarnNoTransactionBlock(bool isTopLevel, const char *stmtType)
static TimestampTz stmtStartTimestamp
SubTransactionId GetCurrentSubTransactionId(void)
void UserAbortTransactionBlock(bool chain)
bool IsInTransactionBlock(bool isTopLevel)
bool PrepareTransactionBlock(const char *gid)
static void AtSubCleanup_Memory(void)
static void StartTransaction(void)
int GetCurrentTransactionNestLevel(void)
void xact_redo(XLogReaderState *record)
TransactionId GetTopTransactionId(void)
static void AtSubCommit_childXids(void)
static void CallSubXactCallbacks(SubXactEvent event, SubTransactionId mySubid, SubTransactionId parentSubid)
void EnterParallelMode(void)
static void AtAbort_ResourceOwner(void)
TransactionId GetStableLatestTransactionId(void)
static void CheckTransactionBlock(bool isTopLevel, bool throwError, const char *stmtType)
void UnregisterSubXactCallback(SubXactCallback callback, void *arg)
static bool forceSyncCommit
void BeginImplicitTransactionBlock(void)
static void CallXactCallbacks(XactEvent event)
static TransactionId unreportedXids[PGPROC_MAX_CACHED_SUBXIDS]
void RequireTransactionBlock(bool isTopLevel, const char *stmtType)
static void AtSubAbort_Memory(void)
static SubXactCallbackItem * SubXact_callbacks
void DefineSavepoint(const char *name)
bool DefaultXactDeferrable
static void CleanupTransaction(void)
static int nUnreportedXids
static const char * TransStateAsString(TransState state)
static TimestampTz xactStopTimestamp
bool TransactionStartedDuringRecovery(void)
static void CommitSubTransaction(void)
static void PushTransaction(void)
TransactionId CheckXidAlive
static TransactionId RecordTransactionCommit(void)
void UnregisterXactCallback(XactCallback callback, void *arg)
bool IsTransactionState(void)
static MemoryContext TransactionAbortContext
void CommandCounterIncrement(void)
void PreventInTransactionBlock(bool isTopLevel, const char *stmtType)
static void AtCleanup_Memory(void)
Size EstimateTransactionStateSpace(void)
TransactionStateData * TransactionState
static void AtSubAbort_childXids(void)
TransactionId GetTopTransactionIdIfAny(void)
static bool AbortCurrentTransactionInternal(void)
static SubTransactionId currentSubTransactionId
static void AssignTransactionId(TransactionState s)
char TransactionBlockStatusCode(void)
void RollbackAndReleaseCurrentSubTransaction(void)
static int nParallelCurrentXids
FullTransactionId GetCurrentFullTransactionIdIfAny(void)
static void CommitTransaction(void)
void StartTransactionCommand(void)
static void PopTransaction(void)
bool IsAbortedTransactionBlockState(void)
void ReleaseCurrentSubTransaction(void)
void EndImplicitTransactionBlock(void)
void StartParallelWorkerTransaction(char *tstatespace)
void SetParallelStartTimestamps(TimestampTz xact_ts, TimestampTz stmt_ts)
static void AtSubAbort_ResourceOwner(void)
void ReleaseSavepoint(const char *name)
static TransactionStateData TopTransactionStateData
static FullTransactionId XactTopFullTransactionId
static void ShowTransactionState(const char *str)
static void PrepareTransaction(void)
FullTransactionId GetTopFullTransactionId(void)
static CommandId currentCommandId
XLogRecPtr XactLogCommitRecord(TimestampTz commit_time, int nsubxacts, TransactionId *subxacts, int nrels, RelFileLocator *rels, int ndroppedstats, xl_xact_stats_item *droppedstats, int nmsgs, SharedInvalidationMessage *msgs, bool relcacheInval, int xactflags, TransactionId twophase_xid, const char *twophase_gid)
void ForceSyncCommit(void)
static TransactionId RecordTransactionAbort(bool isSubXact)
static void AtCommit_Memory(void)
static void AbortSubTransaction(void)
bool IsSubTransaction(void)
void MarkSubxactTopXidLogged(void)
void SetCurrentStatementStartTimestamp(void)
bool TransactionIdIsCurrentTransactionId(TransactionId xid)
static void xact_redo_abort(xl_xact_parsed_abort *parsed, TransactionId xid, XLogRecPtr lsn, ReplOriginId origin_id)
bool IsTransactionBlock(void)
bool IsInParallelMode(void)
int xactGetCommittedChildren(TransactionId **ptr)
TransactionId GetCurrentTransactionIdIfAny(void)
void BeginTransactionBlock(void)
static void AtStart_ResourceOwner(void)
TimestampTz GetCurrentStatementStartTimestamp(void)
TimestampTz GetCurrentTransactionStartTimestamp(void)
static const char * BlockStateAsString(TBlockState blockState)
void EndParallelWorkerTransaction(void)
static void AtAbort_Memory(void)
void RegisterXactCallback(XactCallback callback, void *arg)
void CommitTransactionCommand(void)
void RollbackToSavepoint(const char *name)
bool SubTransactionIsActive(SubTransactionId subxid)
@ TBLOCK_IMPLICIT_INPROGRESS
@ TBLOCK_PARALLEL_INPROGRESS
@ TBLOCK_SUBABORT_RESTART
@ TBLOCK_SUBABORT_PENDING
void RegisterSubXactCallback(SubXactCallback callback, void *arg)
FullTransactionId GetTopFullTransactionIdIfAny(void)
TransactionId GetCurrentTransactionId(void)
static void AbortTransaction(void)
static void AtStart_Cache(void)
static void AtSubStart_ResourceOwner(void)
static void AtSubStart_Memory(void)
bool EndTransactionBlock(bool chain)
bool IsSubxactTopXidLogPending(void)
#define SerializedTransactionStateHeaderSize
void AbortOutOfAnyTransaction(void)
static void ShowTransactionStateRec(const char *str, TransactionState s)
static TransactionState CurrentTransactionState
void AbortCurrentTransaction(void)
static void StartSubTransaction(void)
static TransactionId * ParallelCurrentXids
TimestampTz GetCurrentTransactionStopTimestamp(void)
static void AtCCI_LocalCache(void)
XLogRecPtr XactLogAbortRecord(TimestampTz abort_time, int nsubxacts, TransactionId *subxacts, int nrels, RelFileLocator *rels, int ndroppedstats, xl_xact_stats_item *droppedstats, int xactflags, TransactionId twophase_xid, const char *twophase_gid)
void MarkCurrentTransactionIdLoggedIfAny(void)
static void xact_redo_commit(xl_xact_parsed_commit *parsed, TransactionId xid, XLogRecPtr lsn, ReplOriginId origin_id)
CommandId GetCurrentCommandId(bool used)
#define XactCompletionForceSyncCommit(xinfo)
#define MinSizeOfXactInvals
void(* SubXactCallback)(SubXactEvent event, SubTransactionId mySubid, SubTransactionId parentSubid, void *arg)
#define MinSizeOfXactSubxacts
#define XLOG_XACT_COMMIT_PREPARED
#define XLOG_XACT_INVALIDATIONS
#define XACT_COMPLETION_UPDATE_RELCACHE_FILE
@ SUBXACT_EVENT_PRE_COMMIT_SUB
@ SUBXACT_EVENT_START_SUB
@ SUBXACT_EVENT_ABORT_SUB
@ SUBXACT_EVENT_COMMIT_SUB
void(* XactCallback)(XactEvent event, void *arg)
#define XACT_XINFO_HAS_GID
#define XACT_COMPLETION_FORCE_SYNC_COMMIT
#define XACT_XINFO_HAS_ORIGIN
@ SYNCHRONOUS_COMMIT_REMOTE_APPLY
#define XLOG_XACT_PREPARE
@ XACT_EVENT_PARALLEL_PRE_COMMIT
@ XACT_EVENT_PARALLEL_COMMIT
@ XACT_EVENT_PARALLEL_ABORT
#define SYNCHRONOUS_COMMIT_ON
#define XACT_FLAGS_ACQUIREDACCESSEXCLUSIVELOCK
#define XACT_XINFO_HAS_TWOPHASE
#define MinSizeOfXactRelfileLocators
#define MinSizeOfXactStatsItems
#define XACT_XINFO_HAS_RELFILELOCATORS
#define MinSizeOfXactAbort
#define XACT_COMPLETION_APPLY_FEEDBACK
#define MinSizeOfXactAssignment
#define XACT_XINFO_HAS_DBINFO
#define XACT_FLAGS_NEEDIMMEDIATECOMMIT
#define XactCompletionApplyFeedback(xinfo)
#define XLOG_XACT_ASSIGNMENT
#define XACT_XINFO_HAS_INVALS
#define XLOG_XACT_ABORT_PREPARED
#define XACT_XINFO_HAS_AE_LOCKS
#define XLOG_XACT_HAS_INFO
#define XACT_FLAGS_ACCESSEDTEMPNAMESPACE
#define XactCompletionRelcacheInitFileInval(xinfo)
#define XACT_READ_COMMITTED
#define XACT_XINFO_HAS_SUBXACTS
#define XACT_XINFO_HAS_DROPPED_STATS
void ParseCommitRecord(uint8 info, xl_xact_commit *xlrec, xl_xact_parsed_commit *parsed)
void ParseAbortRecord(uint8 info, xl_xact_abort *xlrec, xl_xact_parsed_abort *parsed)
int xidComparator(const void *arg1, const void *arg2)
bool RecoveryInProgress(void)
XLogRecPtr XactLastRecEnd
XLogRecPtr XactLastCommitEnd
void XLogFlush(XLogRecPtr record)
void XLogSetAsyncXactLSN(XLogRecPtr asyncXactLSN)
#define XLogLogicalInfoActive()
#define XLOG_INCLUDE_ORIGIN
#define XLogStandbyInfoActive()
XLogRecPtr XLogInsert(RmgrId rmid, uint8 info)
void XLogRegisterData(const void *data, uint32 len)
void XLogSetRecordFlags(uint8 flags)
void XLogResetInsertion(void)
void XLogBeginInsert(void)
#define XLogRecGetOrigin(decoder)
#define XLogRecGetInfo(decoder)
#define XLogRecGetData(decoder)
#define XLogRecGetXid(decoder)
#define XLogRecHasAnyBlockRefs(decoder)
#define XLR_SPECIAL_REL_UPDATE
void XLogRequestWalReceiverReply(void)
HotStandbyState standbyState
void WaitLSNCleanup(void)