diff --git a/src/bin/psql/t/001_basic.pl b/src/bin/psql/t/001_basic.pl index 64ce012062..c8780d0a52 100644 --- a/src/bin/psql/t/001_basic.pl +++ b/src/bin/psql/t/001_basic.pl @@ -367,4 +367,33 @@ psql_fails_like( qr/incorrect interval value '10e400'/, '\watch out-of-range interval'); +# Test \g output piped into a program. +# The program is perl -pe '' to simply copy the input to the output. +my $g_file = "$tempdir/g_file_1.out"; +my $perlbin = $^X; +$perlbin =~ s!\\!/!g if $PostgreSQL::Test::Utils::windows_os; +my $pipe_cmd = "$perlbin -pe '' >$g_file"; + +psql_like($node, "SELECT 'one' \\g | $pipe_cmd", qr//, "one command \\g"); +my $c1 = slurp_file($g_file); +like($c1, qr/one/); + +psql_like($node, "SELECT 'two' \\; SELECT 'three' \\g | $pipe_cmd", qr//, "two commands \\g"); +my $c2 = slurp_file($g_file); +like($c2, qr/two.*three/s); + + +psql_like($node, "\\set SHOW_ALL_RESULTS 0\nSELECT 'four' \\; SELECT 'five' \\g | $pipe_cmd", qr//, + "two commands \\g with only last result"); +my $c3 = slurp_file($g_file); +like($c3, qr/five/); +unlike($c3, qr/four/); + +psql_like($node, "copy (values ('foo'),('bar')) to stdout \\g | $pipe_cmd", + qr//, + "copy output passed to \\g pipe"); +my $c4 = slurp_file($g_file); +like($c4, qr/foo.*bar/s); + + done_testing();