0001-uncover-logical-change-details-20230703.patch
text/x-patch
Filename: 0001-uncover-logical-change-details-20230703.patch
Type: text/x-patch
Part: 0
Patch
Format: format-patch
Series: patch 0001
Subject: uncover logical change details
| File | + | − |
|---|---|---|
| src/backend/replication/logical/proto.c | 7 | 4 |
| src/include/replication/logicalproto.h | 1 | 1 |
From e117a1ea78327ebcb85d55fedb3b5e7e3b5c7b27 Mon Sep 17 00:00:00 2001
From: Euler Taveira <euler.taveira@enterprisedb.com>
Date: Mon, 3 Jul 2023 08:54:10 -0300
Subject: [PATCH] uncover logical change details
The commit abc0910e2e0 adds logical change details to error context.
However, the function logicalrep_message_type() introduces an
elog(ERROR) that can hide these details. Instead, avoid elog() and use
??? (that is a synonym for unknown). Spotted by Ashutosh Bapat.
Discussion: https://postgr.es/m/CAExHW5suAEDW-mBZt_qu4RVxWZ1vL54-L%2Bci2zreYWebpzxYsA%40mail.gmail.com
---
src/backend/replication/logical/proto.c | 11 +++++++----
src/include/replication/logicalproto.h | 2 +-
2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/src/backend/replication/logical/proto.c b/src/backend/replication/logical/proto.c
index f308713275..fe6ed9f94b 100644
--- a/src/backend/replication/logical/proto.c
+++ b/src/backend/replication/logical/proto.c
@@ -1213,7 +1213,7 @@ logicalrep_read_stream_abort(StringInfo in,
/*
* Get string representing LogicalRepMsgType.
*/
-char *
+const char *
logicalrep_message_type(LogicalRepMsgType action)
{
switch (action)
@@ -1258,7 +1258,10 @@ logicalrep_message_type(LogicalRepMsgType action)
return "STREAM PREPARE";
}
- elog(ERROR, "invalid logical replication message type \"%c\"", action);
-
- return NULL; /* keep compiler quiet */
+ /*
+ * This function is called to provide context in the error raised when
+ * applying a logical message. So we can't throw an error here. Return an
+ * unknown indicator value so that the original error is still reported.
+ */
+ return "???";
}
diff --git a/src/include/replication/logicalproto.h b/src/include/replication/logicalproto.h
index 0ea2df5088..c5be981eae 100644
--- a/src/include/replication/logicalproto.h
+++ b/src/include/replication/logicalproto.h
@@ -269,6 +269,6 @@ extern void logicalrep_write_stream_abort(StringInfo out, TransactionId xid,
extern void logicalrep_read_stream_abort(StringInfo in,
LogicalRepStreamAbortData *abort_data,
bool read_abort_info);
-extern char *logicalrep_message_type(LogicalRepMsgType action);
+extern const char *logicalrep_message_type(LogicalRepMsgType action);
#endif /* LOGICAL_PROTO_H */
--
2.25.1