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-2022, 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;
113 
114 
115 extern void CheckLogicalDecodingRequirements(void);
116 
118  List *output_plugin_options,
119  bool need_full_snapshot,
120  XLogRecPtr restart_lsn,
121  XLogReaderRoutine *xl_routine,
126  List *output_plugin_options,
127  bool fast_forward,
128  XLogReaderRoutine *xl_routine,
135 
137 extern void LogicalIncreaseRestartDecodingForSlot(XLogRecPtr current_lsn,
138  XLogRecPtr restart_lsn);
140 
142  TransactionId xid, const char *gid);
144 extern void ResetLogicalStreamingState(void);
146 
147 #endif
uint32 TransactionId
Definition: c.h:587
void(* LogicalOutputPluginWriterUpdateProgress)(struct LogicalDecodingContext *lr, XLogRecPtr Ptr, TransactionId xid, bool skipped_xact)
Definition: logical.h:27
void LogicalConfirmReceivedLocation(XLogRecPtr lsn)
Definition: logical.c:1736
void FreeDecodingContext(LogicalDecodingContext *ctx)
Definition: logical.c:634
struct LogicalDecodingContext LogicalDecodingContext
void LogicalIncreaseXminForSlot(XLogRecPtr lsn, TransactionId xmin)
Definition: logical.c:1594
void(* LogicalOutputPluginWriterWrite)(struct LogicalDecodingContext *lr, XLogRecPtr Ptr, TransactionId xid, bool last_write)
Definition: logical.h:19
void DecodingContextFindStartpoint(LogicalDecodingContext *ctx)
Definition: logical.c:590
bool DecodingContextReady(LogicalDecodingContext *ctx)
Definition: logical.c:581
void UpdateDecodingStats(LogicalDecodingContext *ctx)
Definition: logical.c:1833
void LogicalIncreaseRestartDecodingForSlot(XLogRecPtr current_lsn, XLogRecPtr restart_lsn)
Definition: logical.c:1662
LogicalOutputPluginWriterWrite LogicalOutputPluginWriterPrepareWrite
Definition: logical.h:25
void ResetLogicalStreamingState(void)
Definition: logical.c:1823
bool filter_prepare_cb_wrapper(LogicalDecodingContext *ctx, TransactionId xid, const char *gid)
Definition: logical.c:1124
void CheckLogicalDecodingRequirements(void)
Definition: logical.c:103
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:319
bool filter_by_origin_cb_wrapper(LogicalDecodingContext *ctx, RepOriginId origin_id)
Definition: logical.c:1156
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:479
static const char * plugin
Definition: pg_list.h:51
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:156
uint16 RepOriginId
Definition: xlogdefs.h:65
uint64 XLogRecPtr
Definition: xlogdefs.h:21