From 3a66581dd12b4108ce22fb4dad38258df39cb685 Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Fri, 21 Apr 2017 00:56:27 +0900 Subject: [PATCH] Prevent log_replication_commands from causing SQL commands to be logged. Commit 7c4f524 allowed walsender to execute normal SQL commands to support table sync feature in logical replication. Previously while log_statement caused such SQL commands to be logged, log_replication_commands caused them to be logged, too. That is, such SQL commands were logged twice unexpectedly when those settings were both enabled. This commit forces log_replication_commands to log only replication commands, to prevent normal SQL commands from being logged twice. Author: Masahiko Sawada Reviewed-by: Kyotaro Horiguchi Reported-by: Fujii Masao Discussion: http://postgr.es/m/CAHGQGwFDWh_Qr-q_GEMpD+qH=vYPMdVqw=ZOSY3kX_Pna9R9SA@mail.gmail.com --- src/backend/replication/walsender.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c index dbb10c7b00..26090738fc 100644 --- a/src/backend/replication/walsender.c +++ b/src/backend/replication/walsender.c @@ -1368,14 +1368,6 @@ exec_replication_command(const char *cmd_string) MemoryContext cmd_context; MemoryContext old_context; - /* - * Log replication command if log_replication_commands is enabled. Even - * when it's disabled, log the command with DEBUG1 level for backward - * compatibility. - */ - ereport(log_replication_commands ? LOG : DEBUG1, - (errmsg("received replication command: %s", cmd_string))); - /* * CREATE_REPLICATION_SLOT ... LOGICAL exports a snapshot until the next * command arrives. Clean up the old stuff if there's anything. @@ -1399,6 +1391,16 @@ exec_replication_command(const char *cmd_string) cmd_node = replication_parse_result; + /* + * Log replication command if log_replication_commands is enabled. Even + * when it's disabled, log the command with DEBUG1 level for backward + * compatibility. Note that SQL commands are not logged here, and will be + * logged later if log_statement is enabled. + */ + if (cmd_node->type != T_SQLCmd) + ereport(log_replication_commands ? LOG : DEBUG1, + (errmsg("received replication command: %s", cmd_string))); + /* * CREATE_REPLICATION_SLOT ... LOGICAL exports a snapshot. If it was * called outside of transaction the snapshot should be cleared here. -- 2.40.0