From: | Corey Huinker <corey(dot)huinker(at)gmail(dot)com> |
---|---|
To: | Peter Eisentraut <peter(dot)eisentraut(at)enterprisedb(dot)com> |
Cc: | Greg Stark <stark(at)mit(dot)edu>, "Andreas 'ads' Scherbaum" <ads(at)pgug(dot)de>, Matheus Alcantara <mths(dot)dev(at)pm(dot)me>, bt22nakamorit <bt22nakamorit(at)oss(dot)nttdata(dot)com>, Fujii Masao <masao(dot)fujii(at)oss(dot)nttdata(dot)com>, Kyotaro Horiguchi <horikyota(dot)ntt(at)gmail(dot)com>, pgsql-hackers(at)lists(dot)postgresql(dot)org |
Subject: | Re: Make ON_ERROR_STOP stop on shell script failure |
Date: | 2023-03-24 18:16:05 |
Message-ID: | CADkLM=c8hsf6sY36Dqo9nNh-1BcbrY+SHMt5e4mHVjrFtkWxMw@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Fri, Mar 24, 2023 at 11:07 AM Peter Eisentraut <
peter(dot)eisentraut(at)enterprisedb(dot)com> wrote:
> On 20.03.23 19:31, Greg Stark wrote:
> > So I took a look at this patch. The conflict is with 2fe3bdbd691
> > committed by Peter Eisentraut which added error checks for pipes.
> > Afaics the behaviour is now for pipe commands returning non-zero to
> > cause an error*always* regardless of the setting of ON_ERROR_STOP.
>
Commit b0d8f2d983cb25d1035fae1cd7de214dd67809b4 adds SHELL_ERROR as a set
to 'true' whenever a \! or backtick command has a nonzero exit code. So
it'll need some rebasing to remove the duplicated work.
So it's now possible to do this:
\set result = `some command`
\if :SHELL_ERROR
-- maybe test SHELL_EXIT_CODE to see what kind of error
\echo some command failed
-- nah, just quit
\q
\endif
> > I'm not entirely sure that's sensible actually. If you write to a pipe
> > that ends in grep and it happens to produce no matching rows you may
> > actually be quite surprised when that causes your script to fail...
>
I agree that that would be quite surprising, and this feature would be a
non-starter for them. But if we extended the SHELL_ERROR and
SHELL_EXIT_CODE patch to handle output pipes (which maybe we should have
done in the first place), the handling would look like this:
SELECT ... \g grep Frobozz
\if :SHELL_ERROR
SELECT :SHELL_EXIT_CODE = 1 AS grep_found_nothing \gset
\if :grep_found_nothing
...not-a-real-error handling...
\else
...regular error handling...
\endif
\endif
...and that would be the solution for people who wanted to do something
more nuanced than ON_ERROR_STOP.
From | Date | Subject | |
---|---|---|---|
Next Message | Corey Huinker | 2023-03-24 18:20:47 | Re: Make ON_ERROR_STOP stop on shell script failure |
Previous Message | Jelte Fennema | 2023-03-24 18:14:39 | Re: running logical replication as the subscription owner |