summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFujii Masao <fujii@postgresql.org>2025-09-26 21:23:43 +0900
committerFujii Masao <fujii@postgresql.org>2025-09-26 21:23:43 +0900
commit8bb174295e8920fe202e2fb4c8d271e4546b9e98 (patch)
treecc1adf758b5375a8ef1620b171cb497c1038be0a
parent85e0ff62b68224b3354e47fb71b78d309063d06c (diff)
pgbench: Fix assertion failure with retriable errors in pipeline mode.
When running pgbench with --verbose-errors option and a custom script that triggered retriable errors (e.g., serialization errors) in pipeline mode, an assertion failure could occur: Assertion failed: (sql_script[st->use_file].commands[st->command]->type == 1), function commandError, file pgbench.c, line 3062. The failure happened because pgbench assumed these errors would only occur during SQL commands, but in pipeline mode they can also happen during \endpipeline meta command. This commit fixes the assertion failure by adjusting the assertion check to allow such errors during either SQL commands or \endpipeline. Backpatch to v15, where the assertion check was introduced. Author: Yugo Nagata <nagata@sraoss.co.jp> Reviewed-by: Fujii Masao <masao.fujii@gmail.com> Discussion: https://postgr.es/m/CAHGQGwGWQMOzNkQs-LmpDHdNC0h8dmAuUMRvZrEntQi5a-b=Kg@mail.gmail.com
-rw-r--r--src/bin/pgbench/pgbench.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c
index 3cafd88ac53..cc03af05447 100644
--- a/src/bin/pgbench/pgbench.c
+++ b/src/bin/pgbench/pgbench.c
@@ -3059,7 +3059,14 @@ commandFailed(CState *st, const char *cmd, const char *message)
static void
commandError(CState *st, const char *message)
{
- Assert(sql_script[st->use_file].commands[st->command]->type == SQL_COMMAND);
+ /*
+ * Errors should only be detected during an SQL command or the
+ * \endpipeline meta command. Any other case triggers an assertion
+ * failure.
+ */
+ Assert(sql_script[st->use_file].commands[st->command]->type == SQL_COMMAND ||
+ sql_script[st->use_file].commands[st->command]->meta == META_ENDPIPELINE);
+
pg_log_info("client %d got an error in command %d (SQL) of script %d; %s",
st->id, st->command, st->use_file, message);
}