diff --git a/src/backend/replication/logical/logical.c b/src/backend/replication/logical/logical.c
index a33a685dcc6..0c37ebdf9d1 100644
--- a/src/backend/replication/logical/logical.c
+++ b/src/backend/replication/logical/logical.c
@@ -603,6 +603,7 @@ CreateDecodingContext(XLogRecPtr start_lsn,
 
 	ctx->reorder->output_rewrites = ctx->options.receive_rewrites;
 
+pg_usleep(100000);
 	ereport(LogicalDecodingLogLevel(),
 			(errmsg("starting logical decoding for slot \"%s\"",
 					NameStr(slot->data.name)),
diff --git a/src/interfaces/libpq/fe-secure.c b/src/interfaces/libpq/fe-secure.c
index 31d5b48d3f9..c08c2987c46 100644
--- a/src/interfaces/libpq/fe-secure.c
+++ b/src/interfaces/libpq/fe-secure.c
@@ -200,6 +200,16 @@ pqsecure_raw_read(PGconn *conn, void *ptr, size_t len)
 
 	n = recv(conn->sock, ptr, len, 0);
 
+if (conn->replication && conn->replication[0])
+{
+int	save_errno = SOCK_ERRNO;
+char	hb[1024];
+hb[0] = 0;
+for (size_t i = 0; i < n && i < 256; i++) sprintf(hb + (i * 2), "%02x", ((char *)ptr)[i]);
+fprintf(stderr, "!!!pqsecure_raw_read| len=%zu n=%zd errno=%d buf=%s\n", len, n, (n < 0) ? save_errno : 0, hb);
+SOCK_ERRNO_SET(save_errno);
+}
+
 	if (n < 0)
 	{
 		result_errno = SOCK_ERRNO;
diff --git a/src/test/meson.build b/src/test/meson.build
index cd45cbf57fb..cbb6d70a439 100644
--- a/src/test/meson.build
+++ b/src/test/meson.build
@@ -5,6 +5,26 @@ subdir('isolation')
 
 subdir('authentication')
 subdir('postmaster')
+subdir('recovery_1')
+subdir('recovery_2')
+subdir('recovery_3')
+subdir('recovery_4')
+subdir('recovery_5')
+subdir('recovery_6')
+subdir('recovery_7')
+subdir('recovery_8')
+subdir('recovery_9')
+subdir('recovery_10')
+subdir('recovery_11')
+subdir('recovery_12')
+subdir('recovery_13')
+subdir('recovery_14')
+subdir('recovery_15')
+subdir('recovery_16')
+subdir('recovery_17')
+subdir('recovery_18')
+subdir('recovery_19')
+subdir('recovery_20')
 subdir('recovery')
 subdir('subscription')
 subdir('modules')
diff --git a/src/test/recovery/t/035_standby_logical_decoding.pl b/src/test/recovery/t/035_standby_logical_decoding.pl
index 4421059f100..44727a5d9f7 100644
--- a/src/test/recovery/t/035_standby_logical_decoding.pl
+++ b/src/test/recovery/t/035_standby_logical_decoding.pl
@@ -114,6 +114,7 @@ sub check_pg_recvlogical_stderr
 	$slot_user_handle->finish;
 	$return = $?;
 	cmp_ok($return, "!=", 0, "pg_recvlogical exited non-zero");
+print("!!!check_pg_recvlogical_stderr:\n$stderr\n===\n");
 	if ($return)
 	{
 		like($stderr, qr/$check_stderr/, 'slot has been invalidated');
@@ -907,6 +908,10 @@ check_pg_recvlogical_stderr($handle,
 # drop the logical slots
 drop_logical_slots('wal_level_');
 
+for my $i (1 .. 100)
+{
+print("DROP DATABASE scenario: iteration $i\n");
+
 # create the logical slots
 create_logical_slots($node_standby, 'drop_db_');
 
@@ -933,10 +938,17 @@ check_slots_dropped('drop_db', $handle);
 is($node_standby->slot('otherslot')->{'slot_type'},
 	'logical', 'otherslot on standby not dropped');
 
+$node_standby->safe_psql('postgres', q[SELECT pg_drop_replication_slot('otherslot')]);
+$node_primary->safe_psql('postgres', q[CREATE DATABASE testdb]);
+$node_primary->wait_for_replay_catchup($node_standby);
+}
+
 # Cleanup : manually drop the slot that was not dropped.
 $node_standby->psql('postgres',
 	q[SELECT pg_drop_replication_slot('otherslot')]);
 
+if (0)
+{
 ##################################################
 # Test standby promotion and logical decoding behavior
 # after the standby gets promoted.
@@ -1059,5 +1071,6 @@ chomp($cascading_stdout);
 is($cascading_stdout, $expected,
 	'got same expected output from pg_recvlogical decoding session on cascading standby'
 );
+}
 
 done_testing();
