]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
pgbench: Fix assertion failure with retriable errors in pipeline mode.
authorFujii Masao <fujii@postgresql.org>
Fri, 26 Sep 2025 12:23:43 +0000 (21:23 +0900)
committerFujii Masao <fujii@postgresql.org>
Fri, 26 Sep 2025 12:25:17 +0000 (21:25 +0900)
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

src/bin/pgbench/pgbench.c

index cccf0243f21a1aff632190de36d3d009492c9ba3..3b1d9b25daf22dc4e9eb632f170fdacaee72d0e2 100644 (file)
@@ -3046,7 +3046,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);
 }