Re: psql dones't reflect exit status if input command via stdin

From: "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
To: magodo <wztdyl(at)sina(dot)com>
Cc: Postgres general <pgsql-general(at)postgresql(dot)org>
Subject: Re: psql dones't reflect exit status if input command via stdin
Date: 2019-05-14 06:39:58
Message-ID: CAKFQuwZo3-nx6E88i-3UbuJ20f=Oy+uBWHxK9LRt7cVkNDCx2g@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Mon, May 13, 2019 at 11:24 PM magodo <wztdyl(at)sina(dot)com> wrote:

> I found when running command like `# echo "xxx" | psql postgres
> postgres`, the return code is always 0 even though the command ("xxx")
> here is of invalid syntax. While the `psql -c` way handled exit code
> correctly.
>

Its only required to handle things as documented, which this is:

"psql returns 0 to the shell if it finished normally, 1 if a fatal error of
its own occurs (e.g. out of memory, file not found), 2 if the connection to
the server went bad and the session was not interactive, and 3 if an error
occurred in a script and the variable ON_ERROR_STOP was set."

The pipe-version causes psql to execute stdin as a script. By default
ON_ERROR_STOP is unset. Thus psql finished processing the script normally
and while it encountered an error it continued past the error as opposed to
stopping with exit code 3.

Adding "\set ON_ERROR_STOP 1" to your .psqlrc will result in psql behaving
in the way you expect.

David J.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message magodo 2019-05-14 07:24:21 Re: psql dones't reflect exit status if input command via stdin
Previous Message magodo 2019-05-14 06:24:20 psql dones't reflect exit status if input command via stdin