pgoutput: Raise an error for missing protocol version parameter.
authorAmit Kapila <[email protected]>
Tue, 19 Dec 2023 04:23:33 +0000 (09:53 +0530)
committerAmit Kapila <[email protected]>
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