On Mon, 2024-03-04 at 18:10 +0000, Tom Lane wrote:
> Further further fix pg_upgrade crossversion test for adminpack.

Ever since this commit the cross-version upgrade test is failing (for
me, at least) with:

# Running: psql -X -v ON_ERROR_STOP=1 -c drop database if exists
contrib_regression_adminpack;
drop database if exists regression_adminpack -d port=53977
host=/tmp/EK6UT_TufI dbname='postgres'
ERROR:  DROP DATABASE cannot run inside a transaction block

It looks like when you added another command, the two were joined with
";\n", which ends up running the commands in a transaction block, which
doesn't work for DROP DATABASE.

I'm not sure how this test is succeeding for others, so perhaps I'm
doing something wrong?

Patch attached, though I'm not particularly great with perl and the
array flattening in my implementation might be too magical.

Regards,
        Jeff Davis

From 54e13ddb01b859606ebe938a98587aef666df668 Mon Sep 17 00:00:00 2001
From: Jeff Davis <j...@j-davis.com>
Date: Fri, 8 Mar 2024 23:37:16 -0800
Subject: [PATCH] Fix cross-version pg_upgrade test.

---
 src/bin/pg_upgrade/t/002_pg_upgrade.pl | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/bin/pg_upgrade/t/002_pg_upgrade.pl b/src/bin/pg_upgrade/t/002_pg_upgrade.pl
index d951ed3af0..16b42d475f 100644
--- a/src/bin/pg_upgrade/t/002_pg_upgrade.pl
+++ b/src/bin/pg_upgrade/t/002_pg_upgrade.pl
@@ -246,15 +246,19 @@ if (defined($ENV{oldinstall}))
 
 	foreach my $updb (keys %$adjust_cmds)
 	{
-		my $upcmds = join(";\n", @{ $adjust_cmds->{$updb} });
+		my @command_args = ();
+		for my $upcmd (@{ $adjust_cmds->{$updb} })
+		{
+			push @command_args, '-c', $upcmd;
+		}
 
 		# For simplicity, use the newer version's psql to issue the commands.
 		$newnode->command_ok(
 			[
 				'psql', '-X',
 				'-v', 'ON_ERROR_STOP=1',
-				'-c', $upcmds,
 				'-d', $oldnode->connstr($updb),
+				@command_args,
 			],
 			"ran version adaptation commands for database $updb");
 	}
-- 
2.34.1

Reply via email to