round-trip to get the results it needs. However, it's often possible to
adjust the client design to exchange the required information server-side.
Read-modify-write cycles are especially good candidates; for example:
BEGIN;
SELECT x FROM mytable WHERE id = 42 FOR UPDATE;
-- result: x=2
-- client adds 1 to x:
UPDATE mytable SET x = 3 WHERE id = 42;
COMMIT;
-
+
could be much more efficiently done with:
UPDATE mytable SET x = x + 1 WHERE id = 42;
-
+
check if the plugin has already received this PREPARE
in which case it can either error out or skip the remaining changes of
the transaction.
- typedef void (*LogicalDecodeBeginPrepareCB) (struct LogicalDecodingContext *ctx,
- ReorderBufferTXN *txn);
-
+typedef void (*LogicalDecodeBeginPrepareCB) (struct LogicalDecodingContext *ctx,
+ ReorderBufferTXN *txn);
+
rows will have been called before this, if there have been any modified
rows. The
gid field, which is part of the
txn parameter, can be used in this callback.
- typedef void (*LogicalDecodePrepareCB) (struct LogicalDecodingContext *ctx,
- ReorderBufferTXN *txn,
- XLogRecPtr prepare_lsn);
-
+typedef void (*LogicalDecodePrepareCB) (struct LogicalDecodingContext *ctx,
+ ReorderBufferTXN *txn,
+ XLogRecPtr prepare_lsn);
+
whenever a transaction COMMIT PREPARED has been decoded.
The
gid field, which is part of the
txn parameter, can be used in this callback.
- typedef void (*LogicalDecodeCommitPreparedCB) (struct LogicalDecodingContext *ctx,
- ReorderBufferTXN *txn,
- XLogRecPtr commit_lsn);
-
+typedef void (*LogicalDecodeCommitPreparedCB) (struct LogicalDecodingContext *ctx,
+ ReorderBufferTXN *txn,
+ XLogRecPtr commit_lsn);
+
it can apply the rollback, otherwise, it can skip the rollback operation. The
gid alone is not sufficient because the downstream
node can have a prepared transaction with same identifier.
- typedef void (*LogicalDecodeRollbackPreparedCB) (struct LogicalDecodingContext *ctx,
- ReorderBufferTXN *txn,
- XLogRecPtr prepare_end_lsn,
- TimestampTz prepare_time);
-
+typedef void (*LogicalDecodeRollbackPreparedCB) (struct LogicalDecodingContext *ctx,
+ ReorderBufferTXN *txn,
+ XLogRecPtr prepare_end_lsn,
+ TimestampTz prepare_time);
+