Re: Suggestion to add --continue-client-on-abort option to pgbench

Поиск
Список
Период
Сортировка
От Fujii Masao
Тема Re: Suggestion to add --continue-client-on-abort option to pgbench
Дата
Msg-id CAHGQGwHf7oJ7_ShuA+nfuWUW96Uo_YQuHmFXcJavAvZxY0R7jA@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Suggestion to add --continue-client-on-abort option to pgbench  (Fujii Masao <masao.fujii@gmail.com>)
Ответы Re: Suggestion to add --continue-client-on-abort option to pgbench
Список pgsql-hackers
On Tue, Oct 21, 2025 at 9:58 AM Fujii Masao <masao.fujii@gmail.com> wrote:
> I agree that connection failures should prevent further processing even with
> --continue-on-error, and pgbench should focus on handling that first.
> However, the patch doesn't seem to handle cases where the connection is
> terminated by an admin (e.g., via pg_terminate_backend()) correctly.
> Please see the following test case, which is the same one I shared earlier:
>
> -----------------------------------------
> $ cat pipeline.sql
> \startpipeline
> DO $$
>   BEGIN
>     PERFORM pg_sleep(3);
>     PERFORM pg_terminate_backend(pg_backend_pid());
>   END $$;
> \endpipeline
>
> $ pgbench -n -f pipeline.sql -c 2 -t 4 -M extended --continue-on-error
> -----------------------------------------
>
> In this case, PQstatus() (added in readCommandResponse() by the patch)
> still returns CONNECTION_OK (BTW, the SQLSTATE is 57P01 in this case).
> As a result, the expected error message like “client ... script ... aborted
> in command ...” isn't reported. So the PQstatus() check alone that
> the patch added doesn't fully fix the issue.

One approach to address this issue is to keep calling PQgetResult() until
it returns NULL, and then check the connection status when getSQLErrorStatus()
determines the error state. If the connection status is CONNECTION_BAD
at that point, we can treat it as a connection failure and stop processing
even when --continue-on-error is specified. Attached is a WIP patch
implementing this idea based on the v17 patch. It still needs more testing,
review, and possibly documentation updates.

Another option would be to explicitly list all SQLSTATE codes (e.g., 57P01)
that should prevent continued processing, even with --continue-on-error,
inside getSQLErrorStatus(). However, maintaining such a list would be
cumbersome, so I believe the first approach is preferable. Thought?

Regards,

--
Fujii Masao

Вложения

В списке pgsql-hackers по дате отправления: