Обсуждение: BUG #14001: pg_ctl error output empty/faulty

Поиск
Список
Период
Сортировка

BUG #14001: pg_ctl error output empty/faulty

От
doublem09@googlemail.com
Дата:
The following bug has been logged on the website:

Bug reference:      14001
Logged by:          Manuel Mathar
Email address:      doublem09@googlemail.com
PostgreSQL version: 9.5.1
Operating system:   Windows 7 (Enterprise), Windows 10
Description:

Error messages from pg_ctl can't be piped. Tested for 9.5.1, 9.5.0 and 9.3.5
on Windows 7 and 10.

For a simple "pg_ctl status" an error message concerning the missing "-D"
parameter should be expected. But when reading the standard error with
another program (tested with Qt's QProcess readAllStandardError) or piping
it into a file "pg_ctl status 2> out.txt" the result is empty.

Under Windows 10 error messages don't appear even in the command line (no
problem for Windows 7 here).
E.g. typing "pg_ctl status" in a cmd shell yields no output at all.

After a brief test it seems this can be fixed by correcting the negation
"if (!pgwin32_is_service())" to "if (pgwin32_is_service())" in pg_ctl.c
write_stderr(...).

Sorry if I misunderstood this or forgot important information. Feel free to
contact me if You have further questions.

Best regards,
Manuel Mathar

Re: BUG #14001: pg_ctl error output empty/faulty

От
Michael Paquier
Дата:
On Sat, Mar 5, 2016 at 9:00 PM,  <doublem09@googlemail.com> wrote:
> Under Windows 10 error messages don't appear even in the command line (no
> problem for Windows 7 here).
> E.g. typing "pg_ctl status" in a cmd shell yields no output at all.
>
> After a brief test it seems this can be fixed by correcting the negation
> "if (!pgwin32_is_service())" to "if (pgwin32_is_service())" in pg_ctl.c
> write_stderr(...).

Indeed. I don't think that this oversight from a9676139 needs much comment...
--- a/src/bin/pg_ctl/pg_ctl.c
+++ b/src/bin/pg_ctl/pg_ctl.c
@@ -216,7 +216,7 @@ write_stderr(const char *fmt,...)
     * On Win32, we print to stderr if running on a console, or write to
     * eventlog if running as a service
     */
-   if (!isatty(fileno(stderr)))    /* Running as a service */
+   if (!pgwin32_is_service())  /* Running as a service */
    {
Could somebody switch this condition? We should not write to the event
logs if this code is not run for a service.
--
Michael

Re: BUG #14001: pg_ctl error output empty/faulty

От
Tom Lane
Дата:
Michael Paquier <michael.paquier@gmail.com> writes:
> On Sat, Mar 5, 2016 at 9:00 PM,  <doublem09@googlemail.com> wrote:
>> After a brief test it seems this can be fixed by correcting the negation
>> "if (!pgwin32_is_service())" to "if (pgwin32_is_service())" in pg_ctl.c
>> write_stderr(...).

> Indeed. I don't think that this oversight from a9676139 needs much comment...
> --- a/src/bin/pg_ctl/pg_ctl.c
> +++ b/src/bin/pg_ctl/pg_ctl.c
> @@ -216,7 +216,7 @@ write_stderr(const char *fmt,...)
>      * On Win32, we print to stderr if running on a console, or write to
>      * eventlog if running as a service
>      */
> -   if (!isatty(fileno(stderr)))    /* Running as a service */
> +   if (!pgwin32_is_service())  /* Running as a service */
>     {
> Could somebody switch this condition? We should not write to the event
> logs if this code is not run for a service.

Done.

            regards, tom lane

Re: BUG #14001: pg_ctl error output empty/faulty

От
Michael Paquier
Дата:
On Tue, Mar 8, 2016 at 12:41 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Michael Paquier <michael.paquier@gmail.com> writes:
>> On Sat, Mar 5, 2016 at 9:00 PM,  <doublem09@googlemail.com> wrote:
>>> After a brief test it seems this can be fixed by correcting the negation
>>> "if (!pgwin32_is_service())" to "if (pgwin32_is_service())" in pg_ctl.c
>>> write_stderr(...).
>
>> Indeed. I don't think that this oversight from a9676139 needs much comment...
>> --- a/src/bin/pg_ctl/pg_ctl.c
>> +++ b/src/bin/pg_ctl/pg_ctl.c
>> @@ -216,7 +216,7 @@ write_stderr(const char *fmt,...)
>>      * On Win32, we print to stderr if running on a console, or write to
>>      * eventlog if running as a service
>>      */
>> -   if (!isatty(fileno(stderr)))    /* Running as a service */
>> +   if (!pgwin32_is_service())  /* Running as a service */
>>     {
>> Could somebody switch this condition? We should not write to the event
>> logs if this code is not run for a service.
>
> Done.

Thanks..
--
Michael