239#define SerializedTransactionStateHeaderSize \
240 offsetof(SerializedTransactionState, parallelCurrentXids)
250 .topXidLogged =
false,
347 const char *stmtType);
637 bool isSubXact = (s->
parent != NULL);
639 bool log_unknown_top =
false;
651 (
errcode(ERRCODE_INVALID_TRANSACTION_STATE),
652 errmsg(
"cannot assign transaction IDs during a parallel operation")));
664 size_t parentOffset = 0;
669 parents[parentOffset++] = p;
677 while (parentOffset != 0)
695 log_unknown_top =
true;
842 (
errcode(ERRCODE_INVALID_TRANSACTION_STATE),
843 errmsg(
"cannot modify data in a parallel worker")));
982 middle = low + (high - low) / 2;
986 else if (probe < xid)
1020 middle = low + (high - low) / 2;
1117 (
errcode(ERRCODE_INVALID_TRANSACTION_STATE),
1118 errmsg(
"cannot start commands during a parallel operation")));
1125 (
errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
1126 errmsg(
"cannot have more than 2^32-2 commands in a transaction")));
1195 "TransactionAbortContext",
1208 "TopTransactionContext",
1271 "CurTransactionContext",
1324 int ndroppedstats = 0;
1328 bool RelcacheInitFileInval =
false;
1347 &RelcacheInitFileInval);
1354 if (!markXidCommitted)
1364 if (nrels != 0 || ndroppedstats != 0)
1365 elog(
ERROR,
"cannot commit a transaction that deleted files but has no xid");
1394 RelcacheInitFileInval);
1443 nchildren, children, nrels, rels,
1444 ndroppedstats, droppedstats,
1445 nmsgs, invalMessages,
1446 RelcacheInitFileInval,
1498 if ((wrote_xlog && markXidCommitted &&
1507 if (markXidCommitted)
1530 if (markXidCommitted)
1538 if (markXidCommitted)
1556 if (wrote_xlog && markXidCommitted)
1569 pfree(droppedstats);
1680 int new_maxChildXids;
1689 new_maxChildXids =
Min(new_nChildXids * 2,
1692 if (new_maxChildXids < new_nChildXids)
1694 (
errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
1695 errmsg(
"maximum number of committed subtransactions (%d) exceeded",
1760 int ndroppedstats = 0;
1793 elog(
PANIC,
"cannot abort transaction %u, it was already committed",
1820 nchildren, children,
1822 ndroppedstats, droppedstats,
1875 pfree(droppedstats);
2232 bool is_parallel_worker;
2237 if (is_parallel_worker)
2246 elog(
WARNING,
"CommitTransaction while in %s state",
2291 if (is_parallel_worker)
2294 elog(
WARNING,
"parallelModeLevel is %d not 1 at end of parallel worker transaction",
2300 elog(
WARNING,
"parallelModeLevel is %d not 0 at end of transaction",
2338 if (!is_parallel_worker)
2359 if (!is_parallel_worker)
2530 elog(
WARNING,
"PrepareTransaction while in %s state",
2615 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
2616 errmsg(
"cannot PREPARE a transaction that has operated on temporary objects")));
2625 (
errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
2626 errmsg(
"cannot PREPARE a transaction that has exported snapshots")));
2813 bool is_parallel_worker;
2876 elog(
WARNING,
"AbortTransaction while in %s state",
2932 if (!is_parallel_worker)
2962 if (is_parallel_worker)
3017 elog(
FATAL,
"CleanupTransaction: unexpected state %s",
3113 elog(
ERROR,
"StartTransactionCommand: unexpected state %s",
3193 elog(
FATAL,
"CommitTransactionCommand: unexpected state %s",
3359 elog(
ERROR,
"CommitTransactionCommand: unexpected state %s",
3655 (
errcode(ERRCODE_ACTIVE_SQL_TRANSACTION),
3657 errmsg(
"%s cannot run inside a transaction block",
3665 (
errcode(ERRCODE_ACTIVE_SQL_TRANSACTION),
3667 errmsg(
"%s cannot run inside a subtransaction",
3675 (
errcode(ERRCODE_ACTIVE_SQL_TRANSACTION),
3677 errmsg(
"%s cannot be executed from a function", stmtType)));
3682 elog(
FATAL,
"cannot prevent transaction chain");
3746 (
errcode(ERRCODE_NO_ACTIVE_SQL_TRANSACTION),
3748 errmsg(
"%s can only be used in transaction blocks",
3909 item->
callback(event, mySubid, parentSubid, item->
arg);
3955 (
errcode(ERRCODE_ACTIVE_SQL_TRANSACTION),
3956 errmsg(
"there is already a transaction in progress")));
3973 elog(
FATAL,
"BeginTransactionBlock: unexpected state %s",
4005 while (s->
parent != NULL)
4047 bool result =
false;
4068 (
errcode(ERRCODE_NO_ACTIVE_SQL_TRANSACTION),
4070 errmsg(
"%s can only be used in transaction blocks",
4071 "COMMIT AND CHAIN")));
4074 (
errcode(ERRCODE_NO_ACTIVE_SQL_TRANSACTION),
4075 errmsg(
"there is no transaction in progress")));
4093 while (s->
parent != NULL)
4098 elog(
FATAL,
"EndTransactionBlock: unexpected state %s",
4105 elog(
FATAL,
"EndTransactionBlock: unexpected state %s",
4116 while (s->
parent != NULL)
4123 elog(
FATAL,
"EndTransactionBlock: unexpected state %s",
4132 elog(
FATAL,
"EndTransactionBlock: unexpected state %s",
4147 (
errcode(ERRCODE_NO_ACTIVE_SQL_TRANSACTION),
4149 errmsg(
"%s can only be used in transaction blocks",
4150 "COMMIT AND CHAIN")));
4153 (
errcode(ERRCODE_NO_ACTIVE_SQL_TRANSACTION),
4154 errmsg(
"there is no transaction in progress")));
4164 (
errcode(ERRCODE_INVALID_TRANSACTION_STATE),
4165 errmsg(
"cannot commit during a parallel operation")));
4182 elog(
FATAL,
"EndTransactionBlock: unexpected state %s",
4235 while (s->
parent != NULL)
4242 elog(
FATAL,
"UserAbortTransactionBlock: unexpected state %s",
4251 elog(
FATAL,
"UserAbortTransactionBlock: unexpected state %s",
4270 (
errcode(ERRCODE_NO_ACTIVE_SQL_TRANSACTION),
4272 errmsg(
"%s can only be used in transaction blocks",
4273 "ROLLBACK AND CHAIN")));
4276 (
errcode(ERRCODE_NO_ACTIVE_SQL_TRANSACTION),
4277 errmsg(
"there is no transaction in progress")));
4287 (
errcode(ERRCODE_INVALID_TRANSACTION_STATE),
4288 errmsg(
"cannot abort during a parallel operation")));
4305 elog(
FATAL,
"UserAbortTransactionBlock: unexpected state %s",
4386 (
errcode(ERRCODE_INVALID_TRANSACTION_STATE),
4387 errmsg(
"cannot define savepoints during a parallel operation")));
4421 (
errcode(ERRCODE_NO_ACTIVE_SQL_TRANSACTION),
4423 errmsg(
"%s can only be used in transaction blocks",
4445 elog(
FATAL,
"DefineSavepoint: unexpected state %s",
4473 (
errcode(ERRCODE_INVALID_TRANSACTION_STATE),
4474 errmsg(
"cannot release savepoints during a parallel operation")));
4483 (
errcode(ERRCODE_S_E_INVALID_SPECIFICATION),
4484 errmsg(
"savepoint \"%s\" does not exist",
name)));
4490 (
errcode(ERRCODE_NO_ACTIVE_SQL_TRANSACTION),
4492 errmsg(
"%s can only be used in transaction blocks",
4493 "RELEASE SAVEPOINT")));
4521 elog(
FATAL,
"ReleaseSavepoint: unexpected state %s",
4534 (
errcode(ERRCODE_S_E_INVALID_SPECIFICATION),
4535 errmsg(
"savepoint \"%s\" does not exist",
name)));
4540 (
errcode(ERRCODE_S_E_INVALID_SPECIFICATION),
4541 errmsg(
"savepoint \"%s\" does not exist within current savepoint level",
name)));
4582 (
errcode(ERRCODE_INVALID_TRANSACTION_STATE),
4583 errmsg(
"cannot rollback to savepoints during a parallel operation")));
4594 (
errcode(ERRCODE_S_E_INVALID_SPECIFICATION),
4595 errmsg(
"savepoint \"%s\" does not exist",
name)));
4601 (
errcode(ERRCODE_NO_ACTIVE_SQL_TRANSACTION),
4603 errmsg(
"%s can only be used in transaction blocks",
4604 "ROLLBACK TO SAVEPOINT")));
4630 elog(
FATAL,
"RollbackToSavepoint: unexpected state %s",
4643 (
errcode(ERRCODE_S_E_INVALID_SPECIFICATION),
4644 errmsg(
"savepoint \"%s\" does not exist",
name)));
4649 (
errcode(ERRCODE_S_E_INVALID_SPECIFICATION),
4650 errmsg(
"savepoint \"%s\" does not exist within current savepoint level",
name)));
4667 elog(
FATAL,
"RollbackToSavepoint: unexpected state %s",
4679 elog(
FATAL,
"RollbackToSavepoint: unexpected state %s",
4749 elog(
FATAL,
"BeginInternalSubTransaction: unexpected state %s",
4779 elog(
ERROR,
"ReleaseCurrentSubTransaction: unexpected state %s",
4832 elog(
FATAL,
"RollbackAndReleaseCurrentSubTransaction: unexpected state %s",
5035 elog(
FATAL,
"invalid transaction block state: %s",
5072 elog(
WARNING,
"StartSubTransaction while in %s state",
5111 elog(
WARNING,
"CommitSubTransaction while in %s state",
5126 elog(
WARNING,
"parallelModeLevel is %d not 0 at end of subtransaction",
5282 elog(
WARNING,
"AbortSubTransaction while in %s state",
5390 elog(
WARNING,
"CleanupSubTransaction while in %s state",
5437 (
errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
5438 errmsg(
"cannot have more than 2^32-1 subtransactions in a transaction")));
5487 elog(
FATAL,
"PopTransaction with no parent");
5689 (
errmsg_internal(
"%s(%d) name: %s; blockState: %s; state: %s, xid/subid/cid: %u/%u/%u%s%s",
5718 return "INPROGRESS";
5720 return "IMPLICIT_INPROGRESS";
5722 return "PARALLEL_INPROGRESS";
5730 return "ABORT_PENDING";
5736 return "SUBINPROGRESS";
5738 return "SUBRELEASE";
5744 return "SUBABORT_END";
5746 return "SUBABORT_PENDING";
5748 return "SUBRESTART";
5750 return "SUBABORT_RESTART";
5752 return "UNRECOGNIZED";
5769 return "INPROGRESS";
5777 return "UNRECOGNIZED";
5821 const char *twophase_gid)
5882 xl_relfilelocators.
nrels = nrels;
5886 if (ndroppedstats > 0)
5889 xl_dropped_stats.
nitems = ndroppedstats;
5895 xl_invals.
nmsgs = nmsgs;
5901 xl_twophase.
xid = twophase_xid;
5902 Assert(twophase_gid != NULL);
5917 if (xl_xinfo.
xinfo != 0)
5926 if (xl_xinfo.
xinfo != 0)
5991 const char *twophase_gid)
6031 xl_relfilelocators.
nrels = nrels;
6035 if (ndroppedstats > 0)
6038 xl_dropped_stats.
nitems = ndroppedstats;
6044 xl_twophase.
xid = twophase_xid;
6045 Assert(twophase_gid != NULL);
6070 if (xl_xinfo.
xinfo != 0)
6079 if (xl_xinfo.
xinfo != 0)
6155 commit_time, origin_id);
6219 if (parsed->
nrels > 0)
6342 if (parsed->
nrels > 0)
6445 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)
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 PointerIsValid(pointer)
#define FLEXIBLE_ARRAY_MEMBER
uint32 LocalTransactionId
void AtEOXact_ComboCid(void)
void TransactionTreeSetCommitTsData(TransactionId xid, int nsubxids, TransactionId *subxids, TimestampTz timestamp, RepOriginId nodeid)
bool ConditionVariableCancelSleep(void)
void AtEOXact_HashTables(bool isCommit)
void AtEOSubXact_HashTables(bool isCommit, int nestDepth)
int errmsg_internal(const char *fmt,...)
bool message_level_is_interesting(int elevel)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
void AtEOXact_Files(bool isCommit)
void AtEOSubXact_Files(bool isCommit, SubTransactionId mySubid, SubTransactionId parentSubid)
volatile uint32 CritSectionCount
int NewGUCNestLevel(void)
void AtEOXact_GUC(bool isCommit, int nestLevel)
double log_xact_sample_rate
Assert(PointerIsAligned(start, uint64))
#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 VirtualXactLockTableInsert(VirtualTransactionId vxid)
void AtPrepare_Locks(void)
void PostPrepare_Locks(TransactionId xid)
#define InvalidLocalTransactionId
void ResetLogicalStreamingState(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 AtPrepare_MultiXact(void)
void PostPrepare_MultiXact(TransactionId xid)
void AtEOXact_MultiXact(void)
void AtEOSubXact_Namespace(bool isCommit, SubTransactionId mySubid, SubTransactionId parentSubid)
void AtEOXact_Namespace(bool isCommit, bool parallel)
TimestampTz replorigin_session_origin_timestamp
void replorigin_session_advance(XLogRecPtr remote_commit, XLogRecPtr local_commit)
RepOriginId replorigin_session_origin
void replorigin_advance(RepOriginId node, XLogRecPtr remote_commit, XLogRecPtr local_commit, bool go_backward, bool wal_log)
XLogRecPtr replorigin_session_origin_lsn
#define InvalidRepOriginId
static MemoryContext MemoryContextSwitchTo(MemoryContext context)
double pg_prng_double(pg_prng_state *state)
pg_prng_state pg_global_prng_state
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 AtPrepare_PredicateLocks(void)
void RegisterPredicateLockingXid(TransactionId xid)
void PostPrepare_PredicateLocks(TransactionId xid)
#define PGPROC_MAX_CACHED_SUBXIDS
#define DELAY_CHKPT_START
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)
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
TransactionId xsub[FLEXIBLE_ARRAY_MEMBER]
TimestampTz origin_timestamp
xl_xact_stats_item * stats
RelFileLocator * xlocators
TransactionId twophase_xid
xl_xact_stats_item * stats
TransactionId twophase_xid
RelFileLocator * xlocators
TimestampTz origin_timestamp
SharedInvalidationMessage * msgs
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)
bool TransactionIdPrecedes(TransactionId id1, TransactionId id2)
static TransactionId ReadNextTransactionId(void)
#define InvalidTransactionId
#define TransactionIdEquals(id1, id2)
#define XidFromFullTransactionId(x)
#define TransactionIdIsValid(xid)
#define TransactionIdIsNormal(xid)
#define InvalidFullTransactionId
#define FullTransactionIdIsValid(x)
void AfterTriggerBeginXact(void)
void AfterTriggerEndSubXact(bool isCommit)
void AfterTriggerFireDeferred(void)
void AfterTriggerEndXact(bool isCommit)
void AfterTriggerBeginSubXact(void)
void AtAbort_Twophase(void)
void PrepareRedoRemove(TransactionId xid, bool giveWarning)
void EndPrepare(GlobalTransaction gxact)
void StartPrepare(GlobalTransaction gxact)
void PrepareRedoAdd(char *buf, XLogRecPtr start_lsn, XLogRecPtr end_lsn, RepOriginId origin_id)
void PostPrepare_Twophase(void)
GlobalTransaction MarkAsPreparing(TransactionId xid, const char *gid, TimestampTz prepared_at, Oid owner, Oid databaseid)
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)
struct SerializedTransactionState SerializedTransactionState
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]
static void xact_redo_commit(xl_xact_parsed_commit *parsed, TransactionId xid, XLogRecPtr lsn, RepOriginId origin_id)
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)
struct SubXactCallbackItem SubXactCallbackItem
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)
struct XactCallbackItem XactCallbackItem
static SubTransactionId currentSubTransactionId
static void AssignTransactionId(TransactionState s)
static void xact_redo_abort(xl_xact_parsed_abort *parsed, TransactionId xid, XLogRecPtr lsn, RepOriginId origin_id)
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)
bool IsTransactionBlock(void)
bool IsInParallelMode(void)
int xactGetCommittedChildren(TransactionId **ptr)
struct TransactionStateData TransactionStateData
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)
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