Hi, The pgoutput plugin options are documented in the logical streaming replication protocol, but their default values are not mentioned. This can be inconvenient for users - for example, when using pg_recvlogical with pgoutput plugin and needing to know the default behavior of each option. https://www.postgresql.org/docs/devel/protocol-logical-replication.html
I'd like to propose adding the default values to the documentation to improve clarity and usability. Patch attached (0001 patch). While working on this, I also noticed that although most optional parameters (like "binary") are explicitly initialized in parse_output_parameters(), the "origin" parameter is not. Its value (PGOutputData->publish_no_origin) is implicitly set to false due to zero-initialization, but unlike other parameters, it lacks an explicit default assignment. To ensure consistency and make the behavior clearer, I propose explicitly initializing the "origin" parameter as well. A patch for this is also attached (0002 patch). Thoughts? Regards, -- Fujii Masao Advanced Computing Technology Center Research and Development Headquarters NTT DATA CORPORATION
From 60b83897c786c89a1060d9c41adced566b7189b5 Mon Sep 17 00:00:00 2001 From: Fujii Masao <fu...@postgresql.org> Date: Fri, 16 May 2025 23:09:55 +0900 Subject: [PATCH v1 1/2] doc: Document default values for pgoutput options in protocol.sgml. The pgoutput plugin options are described in the logical streaming replication protocol documentation, but their default values were previously not mentioned. This made it less convenient for users, for example, when specifying those options to use pg_recvlogical with pgoutput plugin. This commit adds the explanations of the default values for pgoutput options to improve clarity and usability. --- doc/src/sgml/protocol.sgml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/doc/src/sgml/protocol.sgml b/doc/src/sgml/protocol.sgml index c4d3853cbf2..b9fac360fbf 100644 --- a/doc/src/sgml/protocol.sgml +++ b/doc/src/sgml/protocol.sgml @@ -3482,6 +3482,7 @@ psql "dbname=postgres replication=database" -c "IDENTIFY_SYSTEM;" <para> Boolean option to use binary transfer mode. Binary mode is faster than the text mode but slightly less robust. + The default is <literal>false</literal>. </para> </listitem> </varlistentry> @@ -3494,6 +3495,7 @@ psql "dbname=postgres replication=database" -c "IDENTIFY_SYSTEM;" <para> Boolean option to enable sending the messages that are written by <function>pg_logical_emit_message</function>. + The default is <literal>false</literal>. </para> </listitem> </varlistentry> @@ -3505,10 +3507,11 @@ psql "dbname=postgres replication=database" -c "IDENTIFY_SYSTEM;" <listitem> <para> Boolean option to enable streaming of in-progress transactions. - It accepts an additional value "parallel" to enable sending extra + It accepts an additional value <literal>parallel</literal> to enable sending extra information with some messages to be used for parallelisation. Minimum protocol version 2 is required to turn it on. Minimum protocol - version 4 is required for the "parallel" option. + version 4 is required for the <literal>parallel</literal> option. + The default is <literal>false</literal>. </para> </listitem> </varlistentry> @@ -3521,6 +3524,7 @@ psql "dbname=postgres replication=database" -c "IDENTIFY_SYSTEM;" <para> Boolean option to enable two-phase transactions. Minimum protocol version 3 is required to turn it on. + The default is <literal>false</literal>. </para> </listitem> </varlistentry> @@ -3537,6 +3541,7 @@ psql "dbname=postgres replication=database" -c "IDENTIFY_SYSTEM;" to send the changes regardless of their origin. This can be used to avoid loops (infinite replication of the same data) among replication nodes. + The default is <literal>any</literal>. </para> </listitem> </varlistentry> -- 2.49.0
From 762396c608892a90a6943f9f8bfa017d289075a9 Mon Sep 17 00:00:00 2001 From: Fujii Masao <fu...@postgresql.org> Date: Fri, 16 May 2025 23:53:08 +0900 Subject: [PATCH v1 2/2] pgoutput: Initialize missing default for "origin" parameter. The pgoutput plugin initializes optional parameters like "binary" with default values at the start of processing. However, the "origin" parameter was previously missed and left without explicit initialization. Although the PGOutputData struct, which holds these settings, is zero-initialized at allocation (resulting in publish_no_origin field for "origin" parameter being false by default), this default was not set explicitly, unlike other parameters. This commit adds explicit initialization of the "origin" parameter to ensure consistency and clarity in how defaults are handled. --- src/backend/replication/pgoutput/pgoutput.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/backend/replication/pgoutput/pgoutput.c b/src/backend/replication/pgoutput/pgoutput.c index 693a766e6d7..d7099c060d9 100644 --- a/src/backend/replication/pgoutput/pgoutput.c +++ b/src/backend/replication/pgoutput/pgoutput.c @@ -297,10 +297,12 @@ parse_output_parameters(List *options, PGOutputData *data) bool two_phase_option_given = false; bool origin_option_given = false; + /* Initialize optional parameters to defaults */ data->binary = false; data->streaming = LOGICALREP_STREAM_OFF; data->messages = false; data->two_phase = false; + data->publish_no_origin = false; foreach(lc, options) { -- 2.49.0