]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Don't allow to set replication slot_name as ''.
authorAmit Kapila <akapila@postgresql.org>
Mon, 19 Jul 2021 05:24:21 +0000 (10:54 +0530)
committerAmit Kapila <akapila@postgresql.org>
Mon, 19 Jul 2021 05:24:21 +0000 (10:54 +0530)
We don't allow to create replication slot_name as an empty string ('') via
SQL API pg_create_logical_replication_slot() but it is allowed to be set
via Alter Subscription command. This will lead to apply worker repeatedly
keep trying to stream data via slot_name '' and the user is not allowed to
create the slot with that name.

Author: Japin Li
Reviewed-By: Ranier Vilela, Amit Kapila
Backpatch-through: 10, where it was introduced
Discussion: https://postgr.es/m/MEYP282MB1669CBD98E721C77CA696499B61A9@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM

src/backend/commands/subscriptioncmds.c
src/test/regress/expected/subscription.out
src/test/regress/sql/subscription.sql

index b862e59f1da8a42aa73d5a16ef27dd403b1dba97..e096d5fd2d54c90bce95dbacc8db1afcac81116b 100644 (file)
@@ -159,6 +159,8 @@ parse_subscription_options(List *options,
                        /* Setting slot_name = NONE is treated as no slot name. */
                        if (strcmp(*slot_name, "none") == 0)
                                *slot_name = NULL;
+                       else
+                               ReplicationSlotValidateName(*slot_name, ERROR);
                }
                else if (strcmp(defel->defname, "copy_data") == 0 && copy_data)
                {
index 57f7dd9b0a7351dedc5ac6c69b8471775a981515..4ac7259f3a5b61f871c5a1f0789245b97dda374d 100644 (file)
@@ -86,6 +86,9 @@ ALTER SUBSCRIPTION regress_testsub SET PUBLICATION testpub2, testpub3 WITH (refr
 ALTER SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist2';
 ALTER SUBSCRIPTION regress_testsub SET (slot_name = 'newname');
 -- fail
+ALTER SUBSCRIPTION regress_testsub SET (slot_name = '');
+ERROR:  replication slot name "" is too short
+-- fail
 ALTER SUBSCRIPTION regress_doesnotexist CONNECTION 'dbname=regress_doesnotexist2';
 ERROR:  subscription "regress_doesnotexist" does not exist
 ALTER SUBSCRIPTION regress_testsub SET (create_slot = false);
index 308c098c144ac9d2a59d14a5757d5732d221280d..c9d1bd894881ae43c61aa19c8f99a671b241db82 100644 (file)
@@ -65,6 +65,9 @@ ALTER SUBSCRIPTION regress_testsub SET PUBLICATION testpub2, testpub3 WITH (refr
 ALTER SUBSCRIPTION regress_testsub CONNECTION 'dbname=regress_doesnotexist2';
 ALTER SUBSCRIPTION regress_testsub SET (slot_name = 'newname');
 
+-- fail
+ALTER SUBSCRIPTION regress_testsub SET (slot_name = '');
+
 -- fail
 ALTER SUBSCRIPTION regress_doesnotexist CONNECTION 'dbname=regress_doesnotexist2';
 ALTER SUBSCRIPTION regress_testsub SET (create_slot = false);