156 case RM_LOGICALMSG_ID:
169 case RM_MULTIXACT_ID:
178 case RM_COMMIT_TS_ID:
179 case RM_REPLORIGIN_ID:
228 elog(
ERROR,
"unexpected RM_XLOG_ID record type: %u", info);
258 bool two_phase =
false;
285 bool two_phase =
false;
383 elog(
ERROR,
"unexpected RM_XACT_ID record type: %u", info);
429 elog(
ERROR,
"unexpected RM_STANDBY_ID record type: %u", info);
489 elog(
ERROR,
"unexpected RM_HEAP2_ID record type: %u", info);
574 elog(
ERROR,
"unexpected RM_HEAP_ID record type: %u", info);
629 elog(
ERROR,
"unexpected RM_LOGICALMSG_ID record type: %u", info);
734 commit_time, origin_id, origin_lsn,
740 commit_time, origin_id, origin_lsn);
785 buf->
endptr, prepare_time, origin_id,
868 if (two_phase && !skip_xact)
871 abort_time, origin_id, origin_lsn,
936 change->
data.
tp.newtuple =
941 change->
data.
tp.clear_toast_afterwards =
true;
988 change->
data.
tp.newtuple =
1004 change->
data.
tp.oldtuple =
1010 change->
data.
tp.clear_toast_afterwards =
true;
1061 change->
data.
tp.oldtuple =
1065 datalen, change->
data.
tp.oldtuple);
1068 change->
data.
tp.clear_toast_afterwards =
true;
1149 Assert(tupledata != NULL);
1152 for (i = 0; i < xlrec->
ntuples; i++)
1170 change->
data.
tp.newtuple =
1173 tuple = change->
data.
tp.newtuple;
1186 memset(header, 0, SizeofHeapTupleHeader);
1188 memcpy((
char *) tuple->
tuple.
t_data + SizeofHeapTupleHeader,
1202 change->
data.
tp.clear_toast_afterwards =
true;
1204 change->
data.
tp.clear_toast_afterwards =
false;
1212 Assert(data == tupledata + tuplelen);
1243 change->
data.
tp.clear_toast_afterwards =
true;
1276 memcpy((
char *) &xlhdr,
1280 memset(header, 0, SizeofHeapTupleHeader);
1282 memcpy(((
char *) tuple->
tuple.
t_data) + SizeofHeapTupleHeader,
1283 data + SizeOfHeapHeader,
1288 header->
t_hoff = xlhdr.t_hoff;
static void DecodeMultiInsert(LogicalDecodingContext *ctx, XLogRecordBuffer *buf)
#define XLH_TRUNCATE_CASCADE
#define SizeofHeapTupleHeader
void ReorderBufferQueueMessage(ReorderBuffer *rb, TransactionId xid, Snapshot snapshot, XLogRecPtr lsn, bool transactional, const char *prefix, Size message_size, const char *message)
#define InvalidXLogRecPtr
#define XLH_DELETE_IS_SUPER
#define XACT_XINFO_HAS_ORIGIN
struct ReorderBuffer * reorder
#define XLOG_XACT_PREPARE
static void DecodeInsert(LogicalDecodingContext *ctx, XLogRecordBuffer *buf)
#define XLOG_HEAP2_LOCK_UPDATED
void ReorderBufferAbortOld(ReorderBuffer *rb, TransactionId oldestRunningXid)
void ReorderBufferForget(ReorderBuffer *rb, TransactionId xid, XLogRecPtr lsn)
bool SnapBuildXactNeedsSkip(SnapBuild *builder, XLogRecPtr ptr)
#define XLOG_CHECKPOINT_ONLINE
void ReorderBufferCommit(ReorderBuffer *rb, TransactionId xid, XLogRecPtr commit_lsn, XLogRecPtr end_lsn, TimestampTz commit_time, RepOriginId origin_id, XLogRecPtr origin_lsn)
TimestampTz origin_timestamp
void SnapBuildCommitTxn(SnapBuild *builder, XLogRecPtr lsn, TransactionId xid, int nsubxacts, TransactionId *subxacts)
SnapBuildState SnapBuildCurrentState(SnapBuild *builder)
XLogRecPtr SnapBuildInitialConsistentPoint(SnapBuild *builder)
#define XLOG_XACT_INVALIDATIONS
#define XLOG_HEAP2_REWRITE
TransactionId twophase_xid
static void DecodeXLogTuple(char *data, Size len, ReorderBufferTupleBuf *tup)
#define XLOG_INVALIDATIONS
OutputPluginCallbacks callbacks
#define XLOG_STANDBY_LOCK
#define XLH_INSERT_IS_SPECULATIVE
#define XLOG_RESTORE_POINT
#define XLH_INSERT_ON_TOAST_RELATION
static bool FilterPrepare(LogicalDecodingContext *ctx, const char *gid)
bool filter_prepare_cb_wrapper(LogicalDecodingContext *ctx, const char *gid)
#define XLH_DELETE_CONTAINS_OLD
#define XLOG_HEAP_HOT_UPDATE
ReorderBufferChange * ReorderBufferGetChange(ReorderBuffer *rb)
void ReorderBufferFinishPrepared(ReorderBuffer *rb, TransactionId xid, XLogRecPtr commit_lsn, XLogRecPtr end_lsn, XLogRecPtr initial_consistent_point, TimestampTz commit_time, RepOriginId origin_id, XLogRecPtr origin_lsn, char *gid, bool is_commit)
ReplicationSlotPersistentData data
static bool FilterByOrigin(LogicalDecodingContext *ctx, RepOriginId origin_id)
enum ReorderBufferChangeType action
#define XLOG_END_OF_RECOVERY
static void DecodeUpdate(LogicalDecodingContext *ctx, XLogRecordBuffer *buf)
#define XLogRecGetOrigin(decoder)
#define XLOG_HEAP2_MULTI_INSERT
#define XLH_UPDATE_CONTAINS_NEW_TUPLE
char message[FLEXIBLE_ARRAY_MEMBER]
bool SnapBuildProcessChange(SnapBuild *builder, TransactionId xid, XLogRecPtr lsn)
#define XLOG_HEAP2_VISIBLE
static void DecodeXactOp(LogicalDecodingContext *ctx, XLogRecordBuffer *buf)
Oid relids[FLEXIBLE_ARRAY_MEMBER]
static void DecodeLogicalMsgOp(LogicalDecodingContext *ctx, XLogRecordBuffer *buf)
#define XLogRecGetData(decoder)
static void DecodeSpecConfirm(LogicalDecodingContext *ctx, XLogRecordBuffer *buf)
void LogicalDecodingProcessRecord(LogicalDecodingContext *ctx, XLogReaderState *record)
#define XLogRecGetDataLen(decoder)
#define XLH_INSERT_CONTAINS_NEW_TUPLE
#define XLOG_PARAMETER_CHANGE
SharedInvalidationMessage msgs[FLEXIBLE_ARRAY_MEMBER]
static void DecodeCommit(LogicalDecodingContext *ctx, XLogRecordBuffer *buf, xl_xact_parsed_commit *parsed, TransactionId xid, bool two_phase)
void ReorderBufferImmediateInvalidation(ReorderBuffer *rb, uint32 ninvalidations, SharedInvalidationMessage *invalidations)
static void DecodeDelete(LogicalDecodingContext *ctx, XLogRecordBuffer *buf)
void ReorderBufferSkipPrepare(ReorderBuffer *rb, TransactionId xid)
void ParseCommitRecord(uint8 info, xl_xact_commit *xlrec, xl_xact_parsed_commit *parsed)
#define XLOG_HEAP2_CLEANUP_INFO
#define XLOG_XACT_ABORT_PREPARED
#define XLOG_CHECKPOINT_SHUTDOWN
void SnapBuildProcessNewCid(SnapBuild *builder, TransactionId xid, XLogRecPtr lsn, xl_heap_new_cid *xlrec)
XLogRecord * decoded_record
void SnapBuildProcessRunningXacts(SnapBuild *builder, XLogRecPtr lsn, xl_running_xacts *running)
#define XLOG_HEAP2_NEW_CID
bool filter_by_origin_cb_wrapper(LogicalDecodingContext *ctx, RepOriginId origin_id)
static void DecodeXLogOp(LogicalDecodingContext *ctx, XLogRecordBuffer *buf)
#define XLogRecGetInfo(decoder)
static bool DecodeTXNNeedSkip(LogicalDecodingContext *ctx, XLogRecordBuffer *buf, Oid dbId, RepOriginId origin_id)
void ReorderBufferAssignChild(ReorderBuffer *rb, TransactionId xid, TransactionId subxid, XLogRecPtr lsn)
#define XLH_INSERT_LAST_IN_MULTI
bool XLogRecGetBlockTag(XLogReaderState *record, uint8 block_id, RelFileNode *rnode, ForkNumber *forknum, BlockNumber *blknum)
static void DecodeHeap2Op(LogicalDecodingContext *ctx, XLogRecordBuffer *buf)
#define XLogRecGetXid(decoder)
#define XLOG_XACT_ASSIGNMENT
char * XLogRecGetBlockData(XLogReaderState *record, uint8 block_id, Size *len)
void ReorderBufferQueueChange(ReorderBuffer *rb, TransactionId xid, XLogRecPtr lsn, ReorderBufferChange *change, bool toast_insert)
void ReorderBufferCommitChild(ReorderBuffer *rb, TransactionId xid, TransactionId subxid, XLogRecPtr commit_lsn, XLogRecPtr end_lsn)
void UpdateDecodingStats(LogicalDecodingContext *ctx)
LogicalDecodeFilterPrepareCB filter_prepare_cb
#define XLH_TRUNCATE_RESTART_SEQS
#define XLOG_HEAP_TRUNCATE
void ParsePrepareRecord(uint8 info, xl_xact_prepare *xlrec, xl_xact_parsed_prepare *parsed)
struct ReorderBufferChange::@96::@97 tp
TransactionId twophase_xid
struct SnapBuild * snapshot_builder
#define Assert(condition)
#define XLOG_FPI_FOR_HINT
void ReorderBufferAddInvalidations(ReorderBuffer *rb, TransactionId xid, XLogRecPtr lsn, Size nmsgs, SharedInvalidationMessage *msgs)
struct ReorderBufferChange::@96::@98 truncate
void ParseAbortRecord(uint8 info, xl_xact_abort *xlrec, xl_xact_parsed_abort *parsed)
static void DecodeTruncate(LogicalDecodingContext *ctx, XLogRecordBuffer *buf)
#define XLOG_HEAP_INPLACE
static void header(const char *fmt,...) pg_attribute_printf(1
bool ReorderBufferRememberPrepareInfo(ReorderBuffer *rb, TransactionId xid, XLogRecPtr prepare_lsn, XLogRecPtr end_lsn, TimestampTz prepare_time, RepOriginId origin_id, XLogRecPtr origin_lsn)
#define XLOG_HEAP2_FREEZE_PAGE
#define ItemPointerSetInvalid(pointer)
void ReorderBufferAbort(ReorderBuffer *rb, TransactionId xid, XLogRecPtr lsn)
Oid * ReorderBufferGetRelids(ReorderBuffer *rb, int nrelids)
void SnapBuildSerializationPoint(SnapBuild *builder, XLogRecPtr lsn)
void ReorderBufferPrepare(ReorderBuffer *rb, TransactionId xid, char *gid)
#define XLOG_LOGICAL_MESSAGE
TransactionId oldestRunningXid
#define XLOG_RUNNING_XACTS
static void DecodeHeapOp(LogicalDecodingContext *ctx, XLogRecordBuffer *buf)
void ReorderBufferInvalidate(ReorderBuffer *rb, TransactionId xid, XLogRecPtr lsn)
void ReorderBufferXidSetCatalogChanges(ReorderBuffer *rb, TransactionId xid, XLogRecPtr lsn)
union ReorderBufferChange::@96 data
#define XLogRecGetTopXid(decoder)
#define TransactionIdIsValid(xid)
#define XLH_UPDATE_CONTAINS_OLD
#define XLOG_XACT_COMMIT_PREPARED
void ReorderBufferProcessXid(ReorderBuffer *rb, TransactionId xid, XLogRecPtr lsn)
TimestampTz origin_timestamp
static void DecodePrepare(LogicalDecodingContext *ctx, XLogRecordBuffer *buf, xl_xact_parsed_prepare *parsed)
LogicalDecodeFilterByOriginCB filter_by_origin_cb
struct XLogRecordBuffer XLogRecordBuffer
static void DecodeAbort(LogicalDecodingContext *ctx, XLogRecordBuffer *buf, xl_xact_parsed_abort *parsed, TransactionId xid, bool two_phase)
char twophase_gid[GIDSIZE]
static void DecodeStandbyOp(LogicalDecodingContext *ctx, XLogRecordBuffer *buf)
char twophase_gid[GIDSIZE]
#define XLogRecGetRmid(decoder)
#define XLOG_HEAP_CONFIRM
#define SizeOfMultiInsertTuple
Snapshot SnapBuildGetOrBuildSnapshot(SnapBuild *builder, TransactionId xid)
ReorderBufferTupleBuf * ReorderBufferGetTupleBuf(ReorderBuffer *rb, Size tuple_len)