Обсуждение: 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