PostgreSQL Source Code  git master
logical.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  * logical.h
3  * PostgreSQL logical decoding coordination
4  *
5  * Copyright (c) 2012-2024, PostgreSQL Global Development Group
6  *
7  *-------------------------------------------------------------------------
8  */
9 #ifndef LOGICAL_H
10 #define LOGICAL_H
11 
12 #include "access/xlog.h"
13 #include "access/xlogreader.h"
15 #include "replication/slot.h"
16 
18 
20  XLogRecPtr Ptr,
21  TransactionId xid,
22  bool last_write
23 );
24 
26 
28  XLogRecPtr Ptr,
29  TransactionId xid,
30  bool skipped_xact
31 );
32 
33 typedef struct LogicalDecodingContext
34 {
35  /* memory context this is all allocated in */
37 
38  /* The associated replication slot */
40 
41  /* infrastructure pieces for decoding */
45 
46  /*
47  * Marks the logical decoding context as fast forward decoding one. Such a
48  * context does not have plugin loaded so most of the following properties
49  * are unused.
50  */
52 
55 
56  /*
57  * User specified options
58  */
60 
61  /*
62  * User-Provided callback for writing/streaming out data.
63  */
67 
68  /*
69  * Output buffer.
70  */
72 
73  /*
74  * Private data pointer of the output plugin.
75  */
77 
78  /*
79  * Private data pointer for the data writer.
80  */
82 
83  /*
84  * Does the output plugin support streaming, and is it enabled?
85  */
86  bool streaming;
87 
88  /*
89  * Does the output plugin support two-phase decoding, and is it enabled?
90  */
91  bool twophase;
92 
93  /*
94  * Is two-phase option given by output plugin?
95  *
96  * This flag indicates that the plugin passed in the two-phase option as
97  * part of the START_STREAMING command. We can't rely solely on the
98  * twophase flag which only tells whether the plugin provided all the
99  * necessary two-phase callbacks.
100  */
102 
103  /*
104  * State for writing output.
105  */
110  /* Are we processing the end LSN of a transaction? */
111  bool end_xact;
112 
113  /* Do we need to process any change in fast_forward mode? */
116 
117 
118 extern void CheckLogicalDecodingRequirements(void);
119 
121  List *output_plugin_options,
122  bool need_full_snapshot,
123  XLogRecPtr restart_lsn,
124  XLogReaderRoutine *xl_routine,
129  List *output_plugin_options,
130  bool fast_forward,
131  XLogReaderRoutine *xl_routine,
138 
139 extern void LogicalIncreaseXminForSlot(XLogRecPtr current_lsn,
141 extern void LogicalIncreaseRestartDecodingForSlot(XLogRecPtr current_lsn,
142  XLogRecPtr restart_lsn);
144 
146  TransactionId xid, const char *gid);
148 extern void ResetLogicalStreamingState(void);
150 
151 extern bool LogicalReplicationSlotHasPendingWal(XLogRecPtr end_of_wal);
153  bool *found_consistent_snapshot);
154 
155 #endif
uint32 TransactionId
Definition: c.h:652
void(* LogicalOutputPluginWriterUpdateProgress)(struct LogicalDecodingContext *lr, XLogRecPtr Ptr, TransactionId xid, bool skipped_xact)
Definition: logical.h:27
XLogRecPtr LogicalSlotAdvanceAndCheckSnapState(XLogRecPtr moveto, bool *found_consistent_snapshot)
Definition: logical.c:2060
void LogicalConfirmReceivedLocation(XLogRecPtr lsn)
Definition: logical.c:1834
void FreeDecodingContext(LogicalDecodingContext *ctx)
Definition: logical.c:693
bool LogicalReplicationSlotHasPendingWal(XLogRecPtr end_of_wal)
Definition: logical.c:1978
struct LogicalDecodingContext LogicalDecodingContext
void(* LogicalOutputPluginWriterWrite)(struct LogicalDecodingContext *lr, XLogRecPtr Ptr, TransactionId xid, bool last_write)
Definition: logical.h:19
void DecodingContextFindStartpoint(LogicalDecodingContext *ctx)
Definition: logical.c:649
bool DecodingContextReady(LogicalDecodingContext *ctx)
Definition: logical.c:640
void UpdateDecodingStats(LogicalDecodingContext *ctx)
Definition: logical.c:1931
void LogicalIncreaseRestartDecodingForSlot(XLogRecPtr current_lsn, XLogRecPtr restart_lsn)
Definition: logical.c:1760
LogicalOutputPluginWriterWrite LogicalOutputPluginWriterPrepareWrite
Definition: logical.h:25
void ResetLogicalStreamingState(void)
Definition: logical.c:1921
void LogicalIncreaseXminForSlot(XLogRecPtr current_lsn, TransactionId xmin)
Definition: logical.c:1692
bool filter_prepare_cb_wrapper(LogicalDecodingContext *ctx, TransactionId xid, const char *gid)
Definition: logical.c:1183
void CheckLogicalDecodingRequirements(void)
Definition: logical.c:109
LogicalDecodingContext * CreateInitDecodingContext(const char *plugin, List *output_plugin_options, bool need_full_snapshot, XLogRecPtr restart_lsn, XLogReaderRoutine *xl_routine, LogicalOutputPluginWriterPrepareWrite prepare_write, LogicalOutputPluginWriterWrite do_write, LogicalOutputPluginWriterUpdateProgress update_progress)
Definition: logical.c:329
bool filter_by_origin_cb_wrapper(LogicalDecodingContext *ctx, RepOriginId origin_id)
Definition: logical.c:1215
LogicalDecodingContext * CreateDecodingContext(XLogRecPtr start_lsn, List *output_plugin_options, bool fast_forward, XLogReaderRoutine *xl_routine, LogicalOutputPluginWriterPrepareWrite prepare_write, LogicalOutputPluginWriterWrite do_write, LogicalOutputPluginWriterUpdateProgress update_progress)
Definition: logical.c:495
static const char * plugin
Definition: pg_list.h:54
OutputPluginOptions options
Definition: logical.h:54
XLogReaderState * reader
Definition: logical.h:42
MemoryContext context
Definition: logical.h:36
struct SnapBuild * snapshot_builder
Definition: logical.h:44
void * output_writer_private
Definition: logical.h:81
StringInfo out
Definition: logical.h:71
XLogRecPtr write_location
Definition: logical.h:108
LogicalOutputPluginWriterPrepareWrite prepare_write
Definition: logical.h:64
OutputPluginCallbacks callbacks
Definition: logical.h:53
void * output_plugin_private
Definition: logical.h:76
TransactionId write_xid
Definition: logical.h:109
List * output_plugin_options
Definition: logical.h:59
ReplicationSlot * slot
Definition: logical.h:39
LogicalOutputPluginWriterWrite write
Definition: logical.h:65
struct ReorderBuffer * reorder
Definition: logical.h:43
LogicalOutputPluginWriterUpdateProgress update_progress
Definition: logical.h:66
TransactionId xmin
Definition: snapbuild.c:161
uint16 RepOriginId
Definition: xlogdefs.h:65
uint64 XLogRecPtr
Definition: xlogdefs.h:21