Re: Suggestion to add --continue-client-on-abort option to pgbench
Fujii Masao <masao.fujii@gmail.com>
From: Fujii Masao <masao.fujii@gmail.com>
To: Rintaro Ikeda <ikedarintarof@oss.nttdata.com>
Cc: Yugo Nagata <nagata@sraoss.co.jp>, Chao Li <li.evan.chao@gmail.com>, Jakub Wartak <jakub.wartak@enterprisedb.com>, "Hayato Kuroda (Fujitsu)" <kuroda.hayato@fujitsu.com>,
"slpmcf@gmail.com" <slpmcf@gmail.com>, "boekewurm+postgres@gmail.com" <boekewurm+postgres@gmail.com>, "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>, Srinath Reddy Sadipiralla <srinath2133@gmail.com>,
Dilip Kumar <dilipbalaut@gmail.com>
Date: 2025-10-27T09:13:53Z
Lists: pgsql-hackers
Attachments
- v18-0001-pgbench-Add-continue-on-error-option.patch (application/octet-stream) patch v18-0001
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
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
pgbench: Fix assertion failure with multiple \syncpipeline in pipeline mode.
- 5bc251b28839 17.8 landed
- 00e64e35c8bd 18.2 landed
- 4aa0ac05765e 19 (unreleased) landed
-
pgbench: Add --continue-on-error option.
- 0ab208fa505c 19 (unreleased) landed
-
Fix "inconsistent DLL linkage" warning on Windows MSVC
- a3ea5330fcf4 19 (unreleased) cited
-
pgbench: Fix error reporting in readCommandResponse().
- 7d7e81d1e6b8 13.23 landed
- cb21e1f92fb3 14.20 landed
- bdccb6302871 15.15 landed
- 36c4d30c8f24 16.11 landed
- a912118c6055 17.7 landed
- 29aabbc43269 18.1 landed
- 19d4f9ffc207 19 (unreleased) landed
-
pgbench: Fix assertion failure with retriable errors in pipeline mode.
- 704f517711b4 15.15 landed
- 8b2e290bde21 16.11 landed
- f39d9164b70a 17.7 landed
- c736808e03b7 18.1 landed
- 8bb174295e89 19 (unreleased) landed
-
Allow pgbench to retry in some cases.
- 4a39f87acd6e 15.0 cited