]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
pgoutput: Raise an error for missing protocol version parameter.
authorAmit Kapila <akapila@postgresql.org>
Tue, 19 Dec 2023 04:23:33 +0000 (09:53 +0530)
committerAmit Kapila <akapila@postgresql.org>
Tue, 19 Dec 2023 04:23:33 +0000 (09:53 +0530)
Currently, we give a misleading error if the user omits to pass the
required parameter 'proto_version' in SQL API
pg_logical_slot_get_changes() or during START_REPLICATION protocol
message. The error raised is as follows which indicates that the wrong
version is passed.
ERROR:  client sent proto_version=0 but server only supports protocol 1 or higher

Author: Emre Hasegeli
Reviewed-by: Peter Smith, Amit Kapila
Discussion: https://postgr.es/m/CAE2gYzwdwtUbs-tPSV-QBwgTubiyGD2ZGsSnAVsDfAGGLDrGOA@mail.gmail.com

src/backend/replication/pgoutput/pgoutput.c

index f9ed1083df723c82a634d8f16311a5f9f26578a4..25a95076cf76ddd14d18f95d895871e0f80c8694 100644 (file)
@@ -400,6 +400,16 @@ parse_output_parameters(List *options, PGOutputData *data)
                else
                        elog(ERROR, "unrecognized pgoutput option: %s", defel->defname);
        }
+
+       /* Check required options */
+       if (!protocol_version_given)
+               ereport(ERROR,
+                               errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+                               errmsg("proto_version option missing"));
+       if (!publication_names_given)
+               ereport(ERROR,
+                               errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+                               errmsg("publication_names option missing"));
 }
 
 /*
@@ -449,11 +459,6 @@ pgoutput_startup(LogicalDecodingContext *ctx, OutputPluginOptions *opt,
                                         errmsg("client sent proto_version=%d but server only supports protocol %d or higher",
                                                        data->protocol_version, LOGICALREP_PROTO_MIN_VERSION_NUM)));
 
-               if (data->publication_names == NIL)
-                       ereport(ERROR,
-                                       (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
-                                        errmsg("publication_names parameter missing")));
-
                /*
                 * Decide whether to enable streaming. It is disabled by default, in
                 * which case we just update the flag in decoding context. Otherwise