Cluster.pm psql() undefined $$stderr

From: Oleg Tselebrovskiy <o(dot)tselebrovskiy(at)postgrespro(dot)ru>
To: pgsql-hackers(at)postgresql(dot)org
Subject: Cluster.pm psql() undefined $$stderr
Date: 2025-06-04 14:01:54
Message-ID: 558b45b3b36da8241e65ea3566756042@postgrespro.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Greetings, everyone!

If you call node->psql in not-array context, with on_error_die => 1,
but without passing stderr, you will get the following error
and the test will die, but not the way we expect:

Use of uninitialized value in concatenation (.) or string at
/path/to/source_code/src/test/perl/PostgreSQL/Test/Cluster.pm line 2258

This is because $$stderr is not defined in this case
and warnings became FATAL some time ago.

The code string in question for clarity:
...
die
"error running SQL: '$$stderr'\n..."
if $ret == 3;

Minimal reproduction is:

$node->psql('postgres', q{SELEC 1}, on_error_die => 1);

This can be reproduced at current master (30c15987)

Undefined $$stderr also should break dying on recieving a signal, here:

# We always die on signal.
if (defined $ret)
{
... die (".... $$stderr ...");

One of the ways to fix this is to initialize $$stderr with some value
to avoid Perl error (Use of uninitialized value) and replace it with
existing error: "error running SQL: '$$stderr'\n ..."

With this approach we don't lose any useful error messages in
regress_log_*

The proposed patch is attached (0001)

---------------------------------------------------------------------------

Another question I've stumbled upon when trying to fix the
aforementioned
issue is the following: Does redirecting IPC::Run::run streams work with
Postgres Perl module SimpleTee? I've tried to use it to "tee" STDERR to
both $$stderr and to test's regress_log_* file. I'm not sure I'm doing
this right, but I have not found a way to use SimpleTee with
IPC::Run::run

Is there a way to use them together?

I've tried something like (0002)

Regards, Oleg Tselebrovskiy

Attachment Content-Type Size
0001_fix_undef_stderr.patch text/x-diff 2.0 KB
0002_fix_undef_stderr_SimpleTee_failed.patch text/x-diff 1.8 KB

Browse pgsql-hackers by date

  From Date Subject
Next Message Peter Geoghegan 2025-06-04 14:21:22 Re: strange perf regression with data checksums
Previous Message Joe Conway 2025-06-04 13:52:57 Re: Custom Glibc collation version strings under LOCPATH