PostgreSQL Source Code  git master
xact.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * xact.h
4  * postgres transaction system definitions
5  *
6  *
7  * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  * src/include/access/xact.h
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef XACT_H
15 #define XACT_H
16 
17 #include "access/transam.h"
18 #include "access/xlogreader.h"
19 #include "lib/stringinfo.h"
20 #include "nodes/pg_list.h"
21 #include "storage/relfilenode.h"
22 #include "storage/sinval.h"
23 #include "utils/datetime.h"
24 
25 /*
26  * Maximum size of Global Transaction ID (including '\0').
27  *
28  * Note that the max value of GIDSIZE must fit in the uint16 gidlen,
29  * specified in TwoPhaseFileHeader.
30  */
31 #define GIDSIZE 200
32 
33 /*
34  * Xact isolation levels
35  */
36 #define XACT_READ_UNCOMMITTED 0
37 #define XACT_READ_COMMITTED 1
38 #define XACT_REPEATABLE_READ 2
39 #define XACT_SERIALIZABLE 3
40 
41 extern int DefaultXactIsoLevel;
42 extern PGDLLIMPORT int XactIsoLevel;
43 
44 /*
45  * We implement three isolation levels internally.
46  * The two stronger ones use one snapshot per database transaction;
47  * the others use one snapshot per statement.
48  * Serializable uses predicate locks in addition to snapshots.
49  * These macros should be used to check which isolation level is selected.
50  */
51 #define IsolationUsesXactSnapshot() (XactIsoLevel >= XACT_REPEATABLE_READ)
52 #define IsolationIsSerializable() (XactIsoLevel == XACT_SERIALIZABLE)
53 
54 /* Xact read-only state */
55 extern bool DefaultXactReadOnly;
56 extern bool XactReadOnly;
57 
58 /* flag for logging statements in this transaction */
59 extern bool xact_is_sampled;
60 
61 /*
62  * Xact is deferrable -- only meaningful (currently) for read only
63  * SERIALIZABLE transactions
64  */
65 extern bool DefaultXactDeferrable;
66 extern bool XactDeferrable;
67 
68 typedef enum
69 {
70  SYNCHRONOUS_COMMIT_OFF, /* asynchronous commit */
71  SYNCHRONOUS_COMMIT_LOCAL_FLUSH, /* wait for local flush only */
72  SYNCHRONOUS_COMMIT_REMOTE_WRITE, /* wait for local flush and remote
73  * write */
74  SYNCHRONOUS_COMMIT_REMOTE_FLUSH, /* wait for local and remote flush */
75  SYNCHRONOUS_COMMIT_REMOTE_APPLY /* wait for local flush and remote apply */
77 
78 /* Define the default setting for synchronous_commit */
79 #define SYNCHRONOUS_COMMIT_ON SYNCHRONOUS_COMMIT_REMOTE_FLUSH
80 
81 /* Synchronous commit level */
82 extern int synchronous_commit;
83 
84 /*
85  * Miscellaneous flag bits to record events which occur on the top level
86  * transaction. These flags are only persisted in MyXactFlags and are intended
87  * so we remember to do certain things later in the transaction. This is
88  * globally accessible, so can be set from anywhere in the code which requires
89  * recording flags.
90  */
91 extern int MyXactFlags;
92 
93 /*
94  * XACT_FLAGS_ACCESSEDTEMPNAMESPACE - set when a temporary object is accessed.
95  * We don't allow PREPARE TRANSACTION in that case.
96  */
97 #define XACT_FLAGS_ACCESSEDTEMPNAMESPACE (1U << 0)
98 
99 /*
100  * XACT_FLAGS_ACQUIREDACCESSEXCLUSIVELOCK - records whether the top level xact
101  * logged any Access Exclusive Locks.
102  */
103 #define XACT_FLAGS_ACQUIREDACCESSEXCLUSIVELOCK (1U << 1)
104 
105 /*
106  * start- and end-of-transaction callbacks for dynamically loaded modules
107  */
108 typedef enum
109 {
118 } XactEvent;
119 
120 typedef void (*XactCallback) (XactEvent event, void *arg);
121 
122 typedef enum
123 {
128 } SubXactEvent;
129 
130 typedef void (*SubXactCallback) (SubXactEvent event, SubTransactionId mySubid,
131  SubTransactionId parentSubid, void *arg);
132 
133 
134 /* ----------------
135  * transaction-related XLOG entries
136  * ----------------
137  */
138 
139 /*
140  * XLOG allows to store some information in high 4 bits of log record xl_info
141  * field. We use 3 for the opcode, and one about an optional flag variable.
142  */
143 #define XLOG_XACT_COMMIT 0x00
144 #define XLOG_XACT_PREPARE 0x10
145 #define XLOG_XACT_ABORT 0x20
146 #define XLOG_XACT_COMMIT_PREPARED 0x30
147 #define XLOG_XACT_ABORT_PREPARED 0x40
148 #define XLOG_XACT_ASSIGNMENT 0x50
149 /* free opcode 0x60 */
150 /* free opcode 0x70 */
151 
152 /* mask for filtering opcodes out of xl_info */
153 #define XLOG_XACT_OPMASK 0x70
154 
155 /* does this record have a 'xinfo' field or not */
156 #define XLOG_XACT_HAS_INFO 0x80
157 
158 /*
159  * The following flags, stored in xinfo, determine which information is
160  * contained in commit/abort records.
161  */
162 #define XACT_XINFO_HAS_DBINFO (1U << 0)
163 #define XACT_XINFO_HAS_SUBXACTS (1U << 1)
164 #define XACT_XINFO_HAS_RELFILENODES (1U << 2)
165 #define XACT_XINFO_HAS_INVALS (1U << 3)
166 #define XACT_XINFO_HAS_TWOPHASE (1U << 4)
167 #define XACT_XINFO_HAS_ORIGIN (1U << 5)
168 #define XACT_XINFO_HAS_AE_LOCKS (1U << 6)
169 #define XACT_XINFO_HAS_GID (1U << 7)
170 
171 /*
172  * Also stored in xinfo, these indicating a variety of additional actions that
173  * need to occur when emulating transaction effects during recovery.
174  *
175  * They are named XactCompletion... to differentiate them from
176  * EOXact... routines which run at the end of the original transaction
177  * completion.
178  */
179 #define XACT_COMPLETION_APPLY_FEEDBACK (1U << 29)
180 #define XACT_COMPLETION_UPDATE_RELCACHE_FILE (1U << 30)
181 #define XACT_COMPLETION_FORCE_SYNC_COMMIT (1U << 31)
182 
183 /* Access macros for above flags */
184 #define XactCompletionApplyFeedback(xinfo) \
185  ((xinfo & XACT_COMPLETION_APPLY_FEEDBACK) != 0)
186 #define XactCompletionRelcacheInitFileInval(xinfo) \
187  ((xinfo & XACT_COMPLETION_UPDATE_RELCACHE_FILE) != 0)
188 #define XactCompletionForceSyncCommit(xinfo) \
189  ((xinfo & XACT_COMPLETION_FORCE_SYNC_COMMIT) != 0)
190 
191 typedef struct xl_xact_assignment
192 {
193  TransactionId xtop; /* assigned XID's top-level XID */
194  int nsubxacts; /* number of subtransaction XIDs */
195  TransactionId xsub[FLEXIBLE_ARRAY_MEMBER]; /* assigned subxids */
197 
198 #define MinSizeOfXactAssignment offsetof(xl_xact_assignment, xsub)
199 
200 /*
201  * Commit and abort records can contain a lot of information. But a large
202  * portion of the records won't need all possible pieces of information. So we
203  * only include what's needed.
204  *
205  * A minimal commit/abort record only consists of a xl_xact_commit/abort
206  * struct. The presence of additional information is indicated by bits set in
207  * 'xl_xact_xinfo->xinfo'. The presence of the xinfo field itself is signalled
208  * by a set XLOG_XACT_HAS_INFO bit in the xl_info field.
209  *
210  * NB: All the individual data chunks should be sized to multiples of
211  * sizeof(int) and only require int32 alignment. If they require bigger
212  * alignment, they need to be copied upon reading.
213  */
214 
215 /* sub-records for commit/abort */
216 
217 typedef struct xl_xact_xinfo
218 {
219  /*
220  * Even though we right now only require 1 byte of space in xinfo we use
221  * four so following records don't have to care about alignment. Commit
222  * records can be large, so copying large portions isn't attractive.
223  */
225 } xl_xact_xinfo;
226 
227 typedef struct xl_xact_dbinfo
228 {
229  Oid dbId; /* MyDatabaseId */
230  Oid tsId; /* MyDatabaseTableSpace */
232 
233 typedef struct xl_xact_subxacts
234 {
235  int nsubxacts; /* number of subtransaction XIDs */
236  TransactionId subxacts[FLEXIBLE_ARRAY_MEMBER];
238 #define MinSizeOfXactSubxacts offsetof(xl_xact_subxacts, subxacts)
239 
240 typedef struct xl_xact_relfilenodes
241 {
242  int nrels; /* number of subtransaction XIDs */
243  RelFileNode xnodes[FLEXIBLE_ARRAY_MEMBER];
245 #define MinSizeOfXactRelfilenodes offsetof(xl_xact_relfilenodes, xnodes)
246 
247 typedef struct xl_xact_invals
248 {
249  int nmsgs; /* number of shared inval msgs */
250  SharedInvalidationMessage msgs[FLEXIBLE_ARRAY_MEMBER];
252 #define MinSizeOfXactInvals offsetof(xl_xact_invals, msgs)
253 
254 typedef struct xl_xact_twophase
255 {
258 
259 typedef struct xl_xact_origin
260 {
264 
265 typedef struct xl_xact_commit
266 {
267  TimestampTz xact_time; /* time of commit */
268 
269  /* xl_xact_xinfo follows if XLOG_XACT_HAS_INFO */
270  /* xl_xact_dbinfo follows if XINFO_HAS_DBINFO */
271  /* xl_xact_subxacts follows if XINFO_HAS_SUBXACT */
272  /* xl_xact_relfilenodes follows if XINFO_HAS_RELFILENODES */
273  /* xl_xact_invals follows if XINFO_HAS_INVALS */
274  /* xl_xact_twophase follows if XINFO_HAS_TWOPHASE */
275  /* twophase_gid follows if XINFO_HAS_GID. As a null-terminated string. */
276  /* xl_xact_origin follows if XINFO_HAS_ORIGIN, stored unaligned! */
278 #define MinSizeOfXactCommit (offsetof(xl_xact_commit, xact_time) + sizeof(TimestampTz))
279 
280 typedef struct xl_xact_abort
281 {
282  TimestampTz xact_time; /* time of abort */
283 
284  /* xl_xact_xinfo follows if XLOG_XACT_HAS_INFO */
285  /* xl_xact_dbinfo follows if XINFO_HAS_DBINFO */
286  /* xl_xact_subxacts follows if XINFO_HAS_SUBXACT */
287  /* xl_xact_relfilenodes follows if XINFO_HAS_RELFILENODES */
288  /* No invalidation messages needed. */
289  /* xl_xact_twophase follows if XINFO_HAS_TWOPHASE */
290  /* twophase_gid follows if XINFO_HAS_GID. As a null-terminated string. */
291  /* xl_xact_origin follows if XINFO_HAS_ORIGIN, stored unaligned! */
292 } xl_xact_abort;
293 #define MinSizeOfXactAbort sizeof(xl_xact_abort)
294 
295 /*
296  * Commit/Abort records in the above form are a bit verbose to parse, so
297  * there's a deconstructed versions generated by ParseCommit/AbortRecord() for
298  * easier consumption.
299  */
300 typedef struct xl_xact_parsed_commit
301 {
304 
305  Oid dbId; /* MyDatabaseId */
306  Oid tsId; /* MyDatabaseTableSpace */
307 
310 
311  int nrels;
313 
314  int nmsgs;
316 
317  TransactionId twophase_xid; /* only for 2PC */
318  char twophase_gid[GIDSIZE]; /* only for 2PC */
319  int nabortrels; /* only for 2PC */
320  RelFileNode *abortnodes; /* only for 2PC */
321 
325 
327 
328 typedef struct xl_xact_parsed_abort
329 {
332 
333  Oid dbId; /* MyDatabaseId */
334  Oid tsId; /* MyDatabaseTableSpace */
335 
338 
339  int nrels;
341 
342  TransactionId twophase_xid; /* only for 2PC */
343  char twophase_gid[GIDSIZE]; /* only for 2PC */
344 
348 
349 
350 /* ----------------
351  * extern definitions
352  * ----------------
353  */
354 extern bool IsTransactionState(void);
355 extern bool IsAbortedTransactionBlockState(void);
366 extern void MarkCurrentTransactionIdLoggedIfAny(void);
367 extern bool SubTransactionIsActive(SubTransactionId subxid);
368 extern CommandId GetCurrentCommandId(bool used);
369 extern void SetParallelStartTimestamps(TimestampTz xact_ts, TimestampTz stmt_ts);
373 extern void SetCurrentStatementStartTimestamp(void);
374 extern int GetCurrentTransactionNestLevel(void);
376 extern void CommandCounterIncrement(void);
377 extern void ForceSyncCommit(void);
378 extern void StartTransactionCommand(void);
379 extern void SaveTransactionCharacteristics(void);
380 extern void RestoreTransactionCharacteristics(void);
381 extern void CommitTransactionCommand(void);
382 extern void AbortCurrentTransaction(void);
383 extern void BeginTransactionBlock(void);
384 extern bool EndTransactionBlock(bool chain);
385 extern bool PrepareTransactionBlock(const char *gid);
386 extern void UserAbortTransactionBlock(bool chain);
387 extern void BeginImplicitTransactionBlock(void);
388 extern void EndImplicitTransactionBlock(void);
389 extern void ReleaseSavepoint(const char *name);
390 extern void DefineSavepoint(const char *name);
391 extern void RollbackToSavepoint(const char *name);
392 extern void BeginInternalSubTransaction(const char *name);
393 extern void ReleaseCurrentSubTransaction(void);
395 extern bool IsSubTransaction(void);
397 extern void SerializeTransactionState(Size maxsize, char *start_address);
398 extern void StartParallelWorkerTransaction(char *tstatespace);
399 extern void EndParallelWorkerTransaction(void);
400 extern bool IsTransactionBlock(void);
401 extern bool IsTransactionOrTransactionBlock(void);
402 extern char TransactionBlockStatusCode(void);
403 extern void AbortOutOfAnyTransaction(void);
404 extern void PreventInTransactionBlock(bool isTopLevel, const char *stmtType);
405 extern void RequireTransactionBlock(bool isTopLevel, const char *stmtType);
406 extern void WarnNoTransactionBlock(bool isTopLevel, const char *stmtType);
407 extern bool IsInTransactionBlock(bool isTopLevel);
408 extern void RegisterXactCallback(XactCallback callback, void *arg);
409 extern void UnregisterXactCallback(XactCallback callback, void *arg);
412 
413 extern int xactGetCommittedChildren(TransactionId **ptr);
414 
415 extern XLogRecPtr XactLogCommitRecord(TimestampTz commit_time,
416  int nsubxacts, TransactionId *subxacts,
417  int nrels, RelFileNode *rels,
418  int nmsgs, SharedInvalidationMessage *msgs,
419  bool relcacheInval, bool forceSync,
420  int xactflags,
421  TransactionId twophase_xid,
422  const char *twophase_gid);
423 
424 extern XLogRecPtr XactLogAbortRecord(TimestampTz abort_time,
425  int nsubxacts, TransactionId *subxacts,
426  int nrels, RelFileNode *rels,
427  int xactflags, TransactionId twophase_xid,
428  const char *twophase_gid);
429 extern void xact_redo(XLogReaderState *record);
430 
431 /* xactdesc.c */
432 extern void xact_desc(StringInfo buf, XLogReaderState *record);
433 extern const char *xact_identify(uint8 info);
434 
435 /* also in xactdesc.c, so they can be shared between front/backend code */
436 extern void ParseCommitRecord(uint8 info, xl_xact_commit *xlrec, xl_xact_parsed_commit *parsed);
437 extern void ParseAbortRecord(uint8 info, xl_xact_abort *xlrec, xl_xact_parsed_abort *parsed);
438 
439 extern void EnterParallelMode(void);
440 extern void ExitParallelMode(void);
441 extern bool IsInParallelMode(void);
442 
443 #endif /* XACT_H */
bool IsTransactionOrTransactionBlock(void)
Definition: xact.c:4651
void EnterParallelMode(void)
Definition: xact.c:961
RelFileNode * xnodes
Definition: xact.h:312
void UnregisterSubXactCallback(SubXactCallback callback, void *arg)
Definition: xact.c:3545
struct xl_xact_parsed_commit xl_xact_parsed_commit
uint32 CommandId
Definition: c.h:521
void EndImplicitTransactionBlock(void)
Definition: xact.c:4014
XactEvent
Definition: xact.h:108
const char * xact_identify(uint8 info)
Definition: xactdesc.c:341
void SaveTransactionCharacteristics(void)
Definition: xact.c:2875
struct xl_xact_parsed_abort xl_xact_parsed_abort
void AbortOutOfAnyTransaction(void)
Definition: xact.c:4529
struct xl_xact_xinfo xl_xact_xinfo
FullTransactionId GetTopFullTransactionId(void)
Definition: xact.c:452
void PreventInTransactionBlock(bool isTopLevel, const char *stmtType)
Definition: xact.c:3328
int GetCurrentTransactionNestLevel(void)
Definition: xact.c:842
uint32 TransactionId
Definition: c.h:507
TransactionId GetTopTransactionIdIfAny(void)
Definition: xact.c:410
TimestampTz origin_timestamp
Definition: xact.h:323
bool IsTransactionBlock(void)
Definition: xact.c:4633
TimestampTz GetCurrentTransactionStopTimestamp(void)
Definition: xact.c:804
void ParseCommitRecord(uint8 info, xl_xact_commit *xlrec, xl_xact_parsed_commit *parsed)
Definition: xactdesc.c:34
void UserAbortTransactionBlock(bool chain)
Definition: xact.c:3867
void StartTransactionCommand(void)
Definition: xact.c:2794
void BeginInternalSubTransaction(const char *name)
Definition: xact.c:4357
int64 TimestampTz
Definition: timestamp.h:39
void(* SubXactCallback)(SubXactEvent event, SubTransactionId mySubid, SubTransactionId parentSubid, void *arg)
Definition: xact.h:130
XLogRecPtr XactLogCommitRecord(TimestampTz commit_time, int nsubxacts, TransactionId *subxacts, int nrels, RelFileNode *rels, int nmsgs, SharedInvalidationMessage *msgs, bool relcacheInval, bool forceSync, int xactflags, TransactionId twophase_xid, const char *twophase_gid)
Definition: xact.c:5443
TransactionId xid
Definition: xact.h:256
TransactionId twophase_xid
Definition: xact.h:317
PGDLLIMPORT int XactIsoLevel
Definition: xact.c:75
unsigned char uint8
Definition: c.h:356
TransactionId * subxacts
Definition: xact.h:309
SharedInvalidationMessage * msgs
Definition: xact.h:315
TransactionId GetCurrentTransactionId(void)
Definition: xact.c:423
void ReleaseSavepoint(const char *name)
Definition: xact.c:4121
TransactionId xtop
Definition: xact.h:193
void SetParallelStartTimestamps(TimestampTz xact_ts, TimestampTz stmt_ts)
Definition: xact.c:772
XLogRecPtr origin_lsn
Definition: xact.h:322
TransactionId xsub[FLEXIBLE_ARRAY_MEMBER]
Definition: xact.h:195
void BeginImplicitTransactionBlock(void)
Definition: xact.c:3989
FullTransactionId GetCurrentFullTransactionIdIfAny(void)
Definition: xact.c:499
uint32 SubTransactionId
Definition: c.h:511
struct xl_xact_dbinfo xl_xact_dbinfo
void ParseAbortRecord(uint8 info, xl_xact_abort *xlrec, xl_xact_parsed_abort *parsed)
Definition: xactdesc.c:129
unsigned int Oid
Definition: postgres_ext.h:31
bool XactReadOnly
Definition: xact.c:78
bool XactDeferrable
Definition: xact.c:81
TimestampTz xact_time
Definition: xact.h:282
Oid tsId
Definition: xact.h:230
struct xl_xact_origin xl_xact_origin
void StartParallelWorkerTransaction(char *tstatespace)
Definition: xact.c:5248
SubTransactionId GetCurrentSubTransactionId(void)
Definition: xact.c:708
xl_xact_parsed_commit xl_xact_parsed_prepare
Definition: xact.h:326
#define PGDLLIMPORT
Definition: c.h:1243
int synchronous_commit
Definition: xact.c:83
void(* XactCallback)(XactEvent event, void *arg)
Definition: xact.h:120
int MyXactFlags
Definition: xact.c:119
void BeginTransactionBlock(void)
Definition: xact.c:3587
void CommandCounterIncrement(void)
Definition: xact.c:1003
void MarkCurrentTransactionIdLoggedIfAny(void)
Definition: xact.c:510
bool IsSubTransaction(void)
Definition: xact.c:4706
bool IsAbortedTransactionBlockState(void)
Definition: xact.c:376
bool SubTransactionIsActive(SubTransactionId subxid)
Definition: xact.c:722
void SetCurrentStatementStartTimestamp(void)
Definition: xact.c:818
static void callback(struct sockaddr *addr, struct sockaddr *mask, void *unused)
Definition: test_ifaddrs.c:48
#define GIDSIZE
Definition: xact.h:31
void AbortCurrentTransaction(void)
Definition: xact.c:3159
bool DefaultXactReadOnly
Definition: xact.c:77
static char * buf
Definition: pg_test_fsync.c:68
TimestampTz xact_time
Definition: xact.h:267
bool EndTransactionBlock(bool chain)
Definition: xact.c:3707
struct xl_xact_commit xl_xact_commit
Size EstimateTransactionStateSpace(void)
Definition: xact.c:5150
void RegisterXactCallback(XactCallback callback, void *arg)
Definition: xact.c:3477
struct xl_xact_twophase xl_xact_twophase
unsigned int uint32
Definition: c.h:358
void RestoreTransactionCharacteristics(void)
Definition: xact.c:2883
void RequireTransactionBlock(bool isTopLevel, const char *stmtType)
Definition: xact.c:3394
XLogRecPtr origin_lsn
Definition: xact.h:261
TransactionId * subxacts
Definition: xact.h:337
struct xl_xact_invals xl_xact_invals
bool DefaultXactDeferrable
Definition: xact.c:80
void ReleaseCurrentSubTransaction(void)
Definition: xact.c:4428
struct xl_xact_abort xl_xact_abort
void UnregisterXactCallback(XactCallback callback, void *arg)
Definition: xact.c:3490
void DefineSavepoint(const char *name)
Definition: xact.c:4036
SubXactEvent
Definition: xact.h:122
void xact_desc(StringInfo buf, XLogReaderState *record)
Definition: xactdesc.c:308
int xactGetCommittedChildren(TransactionId **ptr)
Definition: xact.c:5419
void ForceSyncCommit(void)
Definition: xact.c:1051
uint32 xinfo
Definition: xact.h:224
XLogRecPtr origin_lsn
Definition: xact.h:345
bool PrepareTransactionBlock(const char *gid)
Definition: xact.c:3655
RelFileNode * xnodes
Definition: xact.h:340
int nsubxacts
Definition: xact.h:235
int DefaultXactIsoLevel
Definition: xact.c:74
void ExitParallelMode(void)
Definition: xact.c:974
SyncCommitLevel
Definition: xact.h:68
CommandId GetCurrentCommandId(bool used)
Definition: xact.c:746
void SerializeTransactionState(Size maxsize, char *start_address)
Definition: xact.c:5178
Oid dbId
Definition: xact.h:229
TransactionId twophase_xid
Definition: xact.h:342
struct xl_xact_assignment xl_xact_assignment
void RollbackAndReleaseCurrentSubTransaction(void)
Definition: xact.c:4462
XLogRecPtr XactLogAbortRecord(TimestampTz abort_time, int nsubxacts, TransactionId *subxacts, int nrels, RelFileNode *rels, int xactflags, TransactionId twophase_xid, const char *twophase_gid)
Definition: xact.c:5598
RelFileNode * abortnodes
Definition: xact.h:320
bool TransactionIdIsCurrentTransactionId(TransactionId xid)
Definition: xact.c:854
uint64 XLogRecPtr
Definition: xlogdefs.h:21
void WarnNoTransactionBlock(bool isTopLevel, const char *stmtType)
Definition: xact.c:3388
TransactionId GetCurrentTransactionIdIfAny(void)
Definition: xact.c:440
struct xl_xact_subxacts xl_xact_subxacts
TimestampTz GetCurrentStatementStartTimestamp(void)
Definition: xact.c:792
size_t Size
Definition: c.h:466
void CommitTransactionCommand(void)
Definition: xact.c:2895
FullTransactionId GetCurrentFullTransactionId(void)
Definition: xact.c:481
TimestampTz xact_time
Definition: xact.h:330
const char * name
Definition: encode.c:521
bool IsInTransactionBlock(bool isTopLevel)
Definition: xact.c:3442
TimestampTz origin_timestamp
Definition: xact.h:262
struct xl_xact_relfilenodes xl_xact_relfilenodes
FullTransactionId GetTopFullTransactionIdIfAny(void)
Definition: xact.c:468
TransactionId GetTopTransactionId(void)
Definition: xact.c:395
void RegisterSubXactCallback(SubXactCallback callback, void *arg)
Definition: xact.c:3532
char TransactionBlockStatusCode(void)
Definition: xact.c:4665
void * arg
void RollbackToSavepoint(const char *name)
Definition: xact.c:4230
TimestampTz origin_timestamp
Definition: xact.h:346
void EndParallelWorkerTransaction(void)
Definition: xact.c:5273
int nmsgs
Definition: xact.h:249
bool IsInParallelMode(void)
Definition: xact.c:994
void xact_redo(XLogReaderState *record)
Definition: xact.c:5928
bool xact_is_sampled
Definition: xact.c:268
TimestampTz GetCurrentTransactionStartTimestamp(void)
Definition: xact.c:783
TimestampTz xact_time
Definition: xact.h:302
TransactionId GetStableLatestTransactionId(void)
Definition: xact.c:526
bool IsTransactionState(void)
Definition: xact.c:356