In PostgresNode.pm, don't pass SQL to psql on the command line
authorAndrew Dunstan <[email protected]>
Thu, 3 Jun 2021 20:08:33 +0000 (16:08 -0400)
committerAndrew Dunstan <[email protected]>
Thu, 3 Jun 2021 21:33:46 +0000 (17:33 -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 377b8a1514dfa0157037c9a2c1fde3bb462f76f1..5c5926559d9ca07799187248c57706a3233b2731 100644 (file)
@@ -1360,8 +1360,9 @@ sub poll_query_until
    while ($attempts < $max_attempts)
    {
        my $cmd =
-         [ 'psql', '-XAt', '-c', $query, '-d', $self->connstr($dbname) ];
-       my $result = IPC::Run::run $cmd, '>', \$stdout, '2>', \$stderr;
+         [ 'psql', '-XAt', '-d', $self->connstr($dbname) ];
+       my $result = IPC::Run::run $cmd, '<', \$query,
+         '>', \$stdout, '2>', \$stderr;
 
        $stdout =~ s/\r\n/\n/g if $Config{osname} eq 'msys';
        chomp($stdout);