Cluster.pm psql() undefined $$stderr
От | Oleg Tselebrovskiy |
---|---|
Тема | Cluster.pm psql() undefined $$stderr |
Дата | |
Msg-id | 558b45b3b36da8241e65ea3566756042@postgrespro.ru обсуждение исходный текст |
Список | 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
Вложения
В списке pgsql-hackers по дате отправления: