Thread: BUG #14001: pg_ctl error output empty/faulty
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
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
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
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