In PostgresNode.pm, don't pass SQL to psql on the command line
authorAndrew Dunstan <andrew@dunslane.net>
Thu, 3 Jun 2021 20:08:33 +0000 (16:08 -0400)
committerAndrew Dunstan <andrew@dunslane.net>
Thu, 3 Jun 2021 21:29:43 +0000 (17:29 -0400)
The Msys shell mangles certain patterns in its command line, so avoid
handing arbitrary SQL to psql on the command line and instead use
IPC::Run's redirection facility for stdin. This pattern is already
mostly whats used, but query_poll_until() was not doing the right thing.

Problem discovered on the buildfarm when a new TAP test failed on msys.

src/test/perl/PostgresNode.pm

index bc43a4ea35fdec23d318cdb514385a9dad21eb3a..61aa04880724963e1c09620e6bfdd657dc19382c 100644 (file)
@@ -1544,14 +1544,15 @@ sub poll_query_until
 
    $expected = 't' unless defined($expected);    # default value
 
-   my $cmd = [ 'psql', '-XAt', '-c', $query, '-d', $self->connstr($dbname) ];
+   my $cmd = [ 'psql', '-XAt', '-d', $self->connstr($dbname) ];
    my ($stdout, $stderr);
    my $max_attempts = 180 * 10;
    my $attempts     = 0;
 
    while ($attempts < $max_attempts)
    {
-       my $result = IPC::Run::run $cmd, '>', \$stdout, '2>', \$stderr;
+       my $result = IPC::Run::run $cmd, '<', \$query,
+         '>', \$stdout, '2>', \$stderr;
 
        $stdout =~ s/\r\n/\n/g if $Config{osname} eq 'msys';
        chomp($stdout);