v1-0003-Add-trace-of-startup-packets-in-libpq_pipeline-te.patch
application/octet-stream
Filename: v1-0003-Add-trace-of-startup-packets-in-libpq_pipeline-te.patch
Type: application/octet-stream
Part: 3
Patch
Format: format-patch
Series: patch v1-0003
Subject: Add trace of startup packets in libpq_pipeline tests
| File | + | − |
|---|---|---|
| src/interfaces/libpq/fe-trace.c | 40 | 12 |
| src/test/modules/libpq_pipeline/libpq_pipeline.c | 1 | 31 |
| src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl | 7 | 1 |
| src/test/modules/libpq_pipeline/traces/disallowed_in_pipeline.trace | 24 | 0 |
| src/test/modules/libpq_pipeline/traces/multi_pipelines.trace | 24 | 0 |
| src/test/modules/libpq_pipeline/traces/nosync.trace | 24 | 0 |
| src/test/modules/libpq_pipeline/traces/pipeline_abort.trace | 24 | 0 |
| src/test/modules/libpq_pipeline/traces/pipeline_idle.trace | 24 | 0 |
| src/test/modules/libpq_pipeline/traces/prepared.trace | 24 | 0 |
| src/test/modules/libpq_pipeline/traces/simple_pipeline.trace | 24 | 0 |
| src/test/modules/libpq_pipeline/traces/singlerow.trace | 24 | 0 |
| src/test/modules/libpq_pipeline/traces/transaction.trace | 24 | 0 |
From 5d643700b432574aba0e77836989779043e983d0 Mon Sep 17 00:00:00 2001
From: Anthonin Bonnefoy <anthonin.bonnefoy@datadoghq.com>
Date: Fri, 26 Jun 2026 14:32:00 +0200
Subject: Add trace of startup packets in libpq_pipeline tests
The current way to enable tracing in libpq_pipeline only set PQtrace
after the connection is created, missing the trace of the startup
packets.
This patch replaces it by the PGTRACE env var, enabling PQtrace before
the first packet is sent and thus tracing all protocol messages.
With the additional traced messages, additional regress masking is
necessary for StartupMessage and ParameterStatus. The parameter values
can be different depending on the test environment, so both the value
and the message length needs to be masked.
---
src/interfaces/libpq/fe-trace.c | 52 ++++++++++++++-----
.../modules/libpq_pipeline/libpq_pipeline.c | 32 +-----------
.../libpq_pipeline/t/001_libpq_pipeline.pl | 8 ++-
.../traces/disallowed_in_pipeline.trace | 24 +++++++++
.../traces/multi_pipelines.trace | 24 +++++++++
.../libpq_pipeline/traces/nosync.trace | 24 +++++++++
.../traces/pipeline_abort.trace | 24 +++++++++
.../libpq_pipeline/traces/pipeline_idle.trace | 24 +++++++++
.../libpq_pipeline/traces/prepared.trace | 24 +++++++++
.../traces/simple_pipeline.trace | 24 +++++++++
.../libpq_pipeline/traces/singlerow.trace | 24 +++++++++
.../libpq_pipeline/traces/transaction.trace | 24 +++++++++
12 files changed, 264 insertions(+), 44 deletions(-)
diff --git a/src/interfaces/libpq/fe-trace.c b/src/interfaces/libpq/fe-trace.c
index aa2637e4f1e..f4ae22796a6 100644
--- a/src/interfaces/libpq/fe-trace.c
+++ b/src/interfaces/libpq/fe-trace.c
@@ -536,11 +536,11 @@ pqTraceOutput_Authentication(FILE *f, const char *message, int *cursor,
}
static void
-pqTraceOutput_ParameterStatus(FILE *f, const char *message, int *cursor)
+pqTraceOutput_ParameterStatus(FILE *f, const char *message, int *cursor, bool regress)
{
fprintf(f, "ParameterStatus\t");
pqTraceOutputString(f, message, cursor, false);
- pqTraceOutputString(f, message, cursor, false);
+ pqTraceOutputString(f, message, cursor, regress);
}
static void
@@ -645,12 +645,16 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer)
logCursor += 4;
/*
- * In regress mode, suppress the length of ErrorResponse and
- * NoticeResponse. The F (file name), L (line number) and R (routine
+ * In regress mode, suppress the length of ErrorResponse, NoticeResponse
+ * and ParameterStatus. The F (file name), L (line number) and R (routine
* name) fields can change as server code is modified, and if their
- * lengths differ from the originals, that would break tests.
+ * lengths differ from the originals, that would break tests. For
+ * ParameterStatus, the size changes depending on the parameters' value,
+ * whose values depend on the test environment.
*/
- if (regress && !toServer && (id == PqMsg_ErrorResponse || id == PqMsg_NoticeResponse))
+ if (regress && !toServer && (id == PqMsg_ErrorResponse
+ || id == PqMsg_NoticeResponse
+ || id == PqMsg_ParameterStatus))
fprintf(conn->Pfdebug, "%s\tNN\t", prefix);
else
fprintf(conn->Pfdebug, "%s\t%d\t", prefix, length);
@@ -791,7 +795,7 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer)
if (toServer)
fprintf(conn->Pfdebug, "Sync"); /* no message content */
else
- pqTraceOutput_ParameterStatus(conn->Pfdebug, message, &logCursor);
+ pqTraceOutput_ParameterStatus(conn->Pfdebug, message, &logCursor, regress);
break;
case PqMsg_ParameterDescription:
pqTraceOutput_ParameterDescription(conn->Pfdebug, message, &logCursor, regress);
@@ -859,17 +863,27 @@ pqTraceOutputNoTypeByteMessage(PGconn *conn, const char *message)
length = (int) pg_ntoh32(length);
logCursor += 4;
- fprintf(conn->Pfdebug, "F\t%d\t", length);
-
if (length < 8)
{
- fprintf(conn->Pfdebug, "Unknown message\n");
+ fprintf(conn->Pfdebug, "F\t%d\tUnknown message\n", length);
return;
}
memcpy(&version, message + logCursor, 4);
version = (int) pg_ntoh32(version);
+ /*
+ * In regress, suppress the length of StartupMessage. The parameter values
+ * depend on the test environment, so the test may break depending on
+ * where it's executed.
+ */
+ if (regress && (version != CANCEL_REQUEST_CODE
+ && version != NEGOTIATE_SSL_CODE
+ && version != NEGOTIATE_GSS_CODE))
+ fprintf(conn->Pfdebug, "F\tNN\t");
+ else
+ fprintf(conn->Pfdebug, "F\t%d\t", length);
+
if (version == CANCEL_REQUEST_CODE && length >= 16)
{
fprintf(conn->Pfdebug, "CancelRequest\t");
@@ -897,13 +911,27 @@ pqTraceOutputNoTypeByteMessage(PGconn *conn, const char *message)
pqTraceOutputInt16(conn->Pfdebug, message, &logCursor);
while (message[logCursor] != '\0')
{
- /* XXX should we suppress anything in regress mode? */
- pqTraceOutputString(conn->Pfdebug, message, &logCursor, false);
pqTraceOutputString(conn->Pfdebug, message, &logCursor, false);
+ pqTraceOutputString(conn->Pfdebug, message, &logCursor, regress);
}
+
+ /*
+ * Startup messages end with a trailing terminator, advance our cursor
+ * to include it
+ */
+ logCursor++;
}
fputc('\n', conn->Pfdebug);
+
+ /*
+ * Verify the printing routine did it right. There's no one-byte message
+ * identifier here, so logCursor should match the length
+ */
+ if (logCursor != length)
+ fprintf(conn->Pfdebug,
+ "mismatched message length: consumed %d, expected %d\n",
+ logCursor, length);
}
/*
diff --git a/src/test/modules/libpq_pipeline/libpq_pipeline.c b/src/test/modules/libpq_pipeline/libpq_pipeline.c
index 1660a68955e..e7526e46d46 100644
--- a/src/test/modules/libpq_pipeline/libpq_pipeline.c
+++ b/src/test/modules/libpq_pipeline/libpq_pipeline.c
@@ -31,10 +31,6 @@ static bool process_result(PGconn *conn, PGresult *res, int results,
static const char *const progname = "libpq_pipeline";
-/* Options and defaults */
-static char *tracefile = NULL; /* path to PQtrace() file */
-
-
#ifdef DEBUG_OUTPUT
#define pg_debug(...) do { fprintf(stderr, __VA_ARGS__); } while (0)
#else
@@ -2109,7 +2105,6 @@ usage(const char *progname)
fprintf(stderr, " %s [OPTION] tests\n", progname);
fprintf(stderr, " %s [OPTION] TESTNAME [CONNINFO]\n", progname);
fprintf(stderr, "\nOptions:\n");
- fprintf(stderr, " -t TRACEFILE generate a libpq trace to TRACEFILE\n");
fprintf(stderr, " -r NUMROWS use NUMROWS as the test size\n");
}
@@ -2136,13 +2131,12 @@ main(int argc, char **argv)
{
const char *conninfo = "";
PGconn *conn;
- FILE *trace = NULL;
char *testname;
int numrows = 10000;
PGresult *res;
int c;
- while ((c = getopt(argc, argv, "r:t:")) != -1)
+ while ((c = getopt(argc, argv, "r:")) != -1)
{
switch (c)
{
@@ -2156,9 +2150,6 @@ main(int argc, char **argv)
exit(1);
}
break;
- case 't': /* trace file */
- tracefile = pg_strdup(optarg);
- break;
}
}
@@ -2203,24 +2194,6 @@ main(int argc, char **argv)
pg_fatal("failed to set \"debug_parallel_query\": %s", PQerrorMessage(conn));
PQclear(res);
- /* Set the trace file, if requested */
- if (tracefile != NULL)
- {
- if (strcmp(tracefile, "-") == 0)
- trace = stdout;
- else
- trace = fopen(tracefile, "w");
- if (trace == NULL)
- pg_fatal("could not open file \"%s\": %m", tracefile);
-
- /* Make it line-buffered */
- setvbuf(trace, NULL, PG_IOLBF, 0);
-
- PQtrace(conn, trace);
- PQsetTraceFlags(conn,
- PQTRACE_SUPPRESS_TIMESTAMPS | PQTRACE_REGRESS_MODE);
- }
-
if (strcmp(testname, "cancel") == 0)
test_cancel(conn);
else if (strcmp(testname, "disallowed_in_pipeline") == 0)
@@ -2256,8 +2229,5 @@ main(int argc, char **argv)
/* close the connection to the database and cleanup */
PQfinish(conn);
- if (trace && trace != stdout)
- fclose(trace);
-
return 0;
}
diff --git a/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl b/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl
index c74fda8aa37..31cd1795f55 100644
--- a/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl
+++ b/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl
@@ -44,9 +44,15 @@ for my $testname (@tests)
# For a bunch of tests, generate a libpq trace file too.
my $traceout =
"$PostgreSQL::Test::Utils::tmp_check/traces/$testname.trace";
+
+ local $ENV{PGTRACE};
+ local $ENV{PGTRACEFLAGS};
if ($cmptrace)
{
- push @extraargs, "-t" => $traceout;
+ $ENV{PGTRACE} = $traceout;
+ $ENV{PGTRACEFLAGS} = 3;
+ } else {
+ delete $ENV{PGTRACE};
}
# Execute the test using the latest protocol version.
diff --git a/src/test/modules/libpq_pipeline/traces/disallowed_in_pipeline.trace b/src/test/modules/libpq_pipeline/traces/disallowed_in_pipeline.trace
index dd6df03f1ed..1859e228cdb 100644
--- a/src/test/modules/libpq_pipeline/traces/disallowed_in_pipeline.trace
+++ b/src/test/modules/libpq_pipeline/traces/disallowed_in_pipeline.trace
@@ -1,3 +1,27 @@
+F NN StartupMessage 3 2 "user" "SSSS" "database" "SSSS" "application_name" "SSSS"
+B NN ParameterStatus "IntervalStyle" "SSSS"
+B NN ParameterStatus "search_path" "SSSS"
+B NN ParameterStatus "is_superuser" "SSSS"
+B NN ParameterStatus "standard_conforming_strings" "SSSS"
+B NN ParameterStatus "session_authorization" "SSSS"
+B NN ParameterStatus "client_encoding" "SSSS"
+B NN ParameterStatus "server_version" "SSSS"
+B NN ParameterStatus "server_encoding" "SSSS"
+B NN ParameterStatus "in_hot_standby" "SSSS"
+B NN ParameterStatus "integer_datetimes" "SSSS"
+B NN ParameterStatus "TimeZone" "SSSS"
+B NN ParameterStatus "application_name" "SSSS"
+B NN ParameterStatus "default_transaction_read_only" "SSSS"
+B NN ParameterStatus "scram_iterations" "SSSS"
+B NN ParameterStatus "DateStyle" "SSSS"
+B 40 BackendKeyData NNNN 'BBBB'
+B 5 ReadyForQuery I
+F 27 Query "SET lc_messages TO "C""
+B 8 CommandComplete "SET"
+B 5 ReadyForQuery I
+F 35 Query "SET debug_parallel_query = off"
+B 8 CommandComplete "SET"
+B 5 ReadyForQuery I
F 13 Query "SELECT 1"
B 33 RowDescription 1 "?column?" NNNN 0 NNNN 4 -1 0
B 11 DataRow 1 1 '1'
diff --git a/src/test/modules/libpq_pipeline/traces/multi_pipelines.trace b/src/test/modules/libpq_pipeline/traces/multi_pipelines.trace
index 1ee21f61dce..99b621bac21 100644
--- a/src/test/modules/libpq_pipeline/traces/multi_pipelines.trace
+++ b/src/test/modules/libpq_pipeline/traces/multi_pipelines.trace
@@ -1,3 +1,27 @@
+F NN StartupMessage 3 2 "user" "SSSS" "database" "SSSS" "application_name" "SSSS"
+B NN ParameterStatus "IntervalStyle" "SSSS"
+B NN ParameterStatus "search_path" "SSSS"
+B NN ParameterStatus "is_superuser" "SSSS"
+B NN ParameterStatus "standard_conforming_strings" "SSSS"
+B NN ParameterStatus "session_authorization" "SSSS"
+B NN ParameterStatus "client_encoding" "SSSS"
+B NN ParameterStatus "server_version" "SSSS"
+B NN ParameterStatus "server_encoding" "SSSS"
+B NN ParameterStatus "in_hot_standby" "SSSS"
+B NN ParameterStatus "integer_datetimes" "SSSS"
+B NN ParameterStatus "TimeZone" "SSSS"
+B NN ParameterStatus "application_name" "SSSS"
+B NN ParameterStatus "default_transaction_read_only" "SSSS"
+B NN ParameterStatus "scram_iterations" "SSSS"
+B NN ParameterStatus "DateStyle" "SSSS"
+B 40 BackendKeyData NNNN 'BBBB'
+B 5 ReadyForQuery I
+F 27 Query "SET lc_messages TO "C""
+B 8 CommandComplete "SET"
+B 5 ReadyForQuery I
+F 35 Query "SET debug_parallel_query = off"
+B 8 CommandComplete "SET"
+B 5 ReadyForQuery I
F 21 Parse "" "SELECT $1" 1 NNNN
F 19 Bind "" "" 0 1 1 '1' 1 0
F 6 Describe P ""
diff --git a/src/test/modules/libpq_pipeline/traces/nosync.trace b/src/test/modules/libpq_pipeline/traces/nosync.trace
index d99aac649db..f3ce2b1ed0b 100644
--- a/src/test/modules/libpq_pipeline/traces/nosync.trace
+++ b/src/test/modules/libpq_pipeline/traces/nosync.trace
@@ -1,3 +1,27 @@
+F NN StartupMessage 3 2 "user" "SSSS" "database" "SSSS" "application_name" "SSSS"
+B NN ParameterStatus "IntervalStyle" "SSSS"
+B NN ParameterStatus "search_path" "SSSS"
+B NN ParameterStatus "is_superuser" "SSSS"
+B NN ParameterStatus "standard_conforming_strings" "SSSS"
+B NN ParameterStatus "session_authorization" "SSSS"
+B NN ParameterStatus "client_encoding" "SSSS"
+B NN ParameterStatus "server_version" "SSSS"
+B NN ParameterStatus "server_encoding" "SSSS"
+B NN ParameterStatus "in_hot_standby" "SSSS"
+B NN ParameterStatus "integer_datetimes" "SSSS"
+B NN ParameterStatus "TimeZone" "SSSS"
+B NN ParameterStatus "application_name" "SSSS"
+B NN ParameterStatus "default_transaction_read_only" "SSSS"
+B NN ParameterStatus "scram_iterations" "SSSS"
+B NN ParameterStatus "DateStyle" "SSSS"
+B 40 BackendKeyData NNNN 'BBBB'
+B 5 ReadyForQuery I
+F 27 Query "SET lc_messages TO "C""
+B 8 CommandComplete "SET"
+B 5 ReadyForQuery I
+F 35 Query "SET debug_parallel_query = off"
+B 8 CommandComplete "SET"
+B 5 ReadyForQuery I
F 34 Parse "" "SELECT repeat('xyzxz', 12)" 0
F 14 Bind "" "" 0 0 1 0
F 6 Describe P ""
diff --git a/src/test/modules/libpq_pipeline/traces/pipeline_abort.trace b/src/test/modules/libpq_pipeline/traces/pipeline_abort.trace
index 3e5007d13b2..5e27a6dbe2f 100644
--- a/src/test/modules/libpq_pipeline/traces/pipeline_abort.trace
+++ b/src/test/modules/libpq_pipeline/traces/pipeline_abort.trace
@@ -1,3 +1,27 @@
+F NN StartupMessage 3 2 "user" "SSSS" "database" "SSSS" "application_name" "SSSS"
+B NN ParameterStatus "IntervalStyle" "SSSS"
+B NN ParameterStatus "search_path" "SSSS"
+B NN ParameterStatus "is_superuser" "SSSS"
+B NN ParameterStatus "standard_conforming_strings" "SSSS"
+B NN ParameterStatus "session_authorization" "SSSS"
+B NN ParameterStatus "client_encoding" "SSSS"
+B NN ParameterStatus "server_version" "SSSS"
+B NN ParameterStatus "server_encoding" "SSSS"
+B NN ParameterStatus "in_hot_standby" "SSSS"
+B NN ParameterStatus "integer_datetimes" "SSSS"
+B NN ParameterStatus "TimeZone" "SSSS"
+B NN ParameterStatus "application_name" "SSSS"
+B NN ParameterStatus "default_transaction_read_only" "SSSS"
+B NN ParameterStatus "scram_iterations" "SSSS"
+B NN ParameterStatus "DateStyle" "SSSS"
+B 40 BackendKeyData NNNN 'BBBB'
+B 5 ReadyForQuery I
+F 27 Query "SET lc_messages TO "C""
+B 8 CommandComplete "SET"
+B 5 ReadyForQuery I
+F 35 Query "SET debug_parallel_query = off"
+B 8 CommandComplete "SET"
+B 5 ReadyForQuery I
F 42 Query "DROP TABLE IF EXISTS pq_pipeline_demo"
B NN NoticeResponse S "NOTICE" V "NOTICE" C "00000" M "table "pq_pipeline_demo" does not exist, skipping" F "SSSS" L "SSSS" R "SSSS" \x00
B 15 CommandComplete "DROP TABLE"
diff --git a/src/test/modules/libpq_pipeline/traces/pipeline_idle.trace b/src/test/modules/libpq_pipeline/traces/pipeline_idle.trace
index 83ee415b03e..4c5215c0096 100644
--- a/src/test/modules/libpq_pipeline/traces/pipeline_idle.trace
+++ b/src/test/modules/libpq_pipeline/traces/pipeline_idle.trace
@@ -1,3 +1,27 @@
+F NN StartupMessage 3 2 "user" "SSSS" "database" "SSSS" "application_name" "SSSS"
+B NN ParameterStatus "IntervalStyle" "SSSS"
+B NN ParameterStatus "search_path" "SSSS"
+B NN ParameterStatus "is_superuser" "SSSS"
+B NN ParameterStatus "standard_conforming_strings" "SSSS"
+B NN ParameterStatus "session_authorization" "SSSS"
+B NN ParameterStatus "client_encoding" "SSSS"
+B NN ParameterStatus "server_version" "SSSS"
+B NN ParameterStatus "server_encoding" "SSSS"
+B NN ParameterStatus "in_hot_standby" "SSSS"
+B NN ParameterStatus "integer_datetimes" "SSSS"
+B NN ParameterStatus "TimeZone" "SSSS"
+B NN ParameterStatus "application_name" "SSSS"
+B NN ParameterStatus "default_transaction_read_only" "SSSS"
+B NN ParameterStatus "scram_iterations" "SSSS"
+B NN ParameterStatus "DateStyle" "SSSS"
+B 40 BackendKeyData NNNN 'BBBB'
+B 5 ReadyForQuery I
+F 27 Query "SET lc_messages TO "C""
+B 8 CommandComplete "SET"
+B 5 ReadyForQuery I
+F 35 Query "SET debug_parallel_query = off"
+B 8 CommandComplete "SET"
+B 5 ReadyForQuery I
F 16 Parse "" "SELECT 1" 0
F 14 Bind "" "" 0 0 1 0
F 6 Describe P ""
diff --git a/src/test/modules/libpq_pipeline/traces/prepared.trace b/src/test/modules/libpq_pipeline/traces/prepared.trace
index aeb5de109e0..3cd16969144 100644
--- a/src/test/modules/libpq_pipeline/traces/prepared.trace
+++ b/src/test/modules/libpq_pipeline/traces/prepared.trace
@@ -1,3 +1,27 @@
+F NN StartupMessage 3 2 "user" "SSSS" "database" "SSSS" "application_name" "SSSS"
+B NN ParameterStatus "IntervalStyle" "SSSS"
+B NN ParameterStatus "search_path" "SSSS"
+B NN ParameterStatus "is_superuser" "SSSS"
+B NN ParameterStatus "standard_conforming_strings" "SSSS"
+B NN ParameterStatus "session_authorization" "SSSS"
+B NN ParameterStatus "client_encoding" "SSSS"
+B NN ParameterStatus "server_version" "SSSS"
+B NN ParameterStatus "server_encoding" "SSSS"
+B NN ParameterStatus "in_hot_standby" "SSSS"
+B NN ParameterStatus "integer_datetimes" "SSSS"
+B NN ParameterStatus "TimeZone" "SSSS"
+B NN ParameterStatus "application_name" "SSSS"
+B NN ParameterStatus "default_transaction_read_only" "SSSS"
+B NN ParameterStatus "scram_iterations" "SSSS"
+B NN ParameterStatus "DateStyle" "SSSS"
+B 40 BackendKeyData NNNN 'BBBB'
+B 5 ReadyForQuery I
+F 27 Query "SET lc_messages TO "C""
+B 8 CommandComplete "SET"
+B 5 ReadyForQuery I
+F 35 Query "SET debug_parallel_query = off"
+B 8 CommandComplete "SET"
+B 5 ReadyForQuery I
F 68 Parse "select_one" "SELECT $1, '42', $1::numeric, interval '1 sec'" 1 NNNN
F 16 Describe S "select_one"
F 4 Sync
diff --git a/src/test/modules/libpq_pipeline/traces/simple_pipeline.trace b/src/test/modules/libpq_pipeline/traces/simple_pipeline.trace
index 5c94749bc1e..4f38387f6ca 100644
--- a/src/test/modules/libpq_pipeline/traces/simple_pipeline.trace
+++ b/src/test/modules/libpq_pipeline/traces/simple_pipeline.trace
@@ -1,3 +1,27 @@
+F NN StartupMessage 3 2 "user" "SSSS" "database" "SSSS" "application_name" "SSSS"
+B NN ParameterStatus "IntervalStyle" "SSSS"
+B NN ParameterStatus "search_path" "SSSS"
+B NN ParameterStatus "is_superuser" "SSSS"
+B NN ParameterStatus "standard_conforming_strings" "SSSS"
+B NN ParameterStatus "session_authorization" "SSSS"
+B NN ParameterStatus "client_encoding" "SSSS"
+B NN ParameterStatus "server_version" "SSSS"
+B NN ParameterStatus "server_encoding" "SSSS"
+B NN ParameterStatus "in_hot_standby" "SSSS"
+B NN ParameterStatus "integer_datetimes" "SSSS"
+B NN ParameterStatus "TimeZone" "SSSS"
+B NN ParameterStatus "application_name" "SSSS"
+B NN ParameterStatus "default_transaction_read_only" "SSSS"
+B NN ParameterStatus "scram_iterations" "SSSS"
+B NN ParameterStatus "DateStyle" "SSSS"
+B 40 BackendKeyData NNNN 'BBBB'
+B 5 ReadyForQuery I
+F 27 Query "SET lc_messages TO "C""
+B 8 CommandComplete "SET"
+B 5 ReadyForQuery I
+F 35 Query "SET debug_parallel_query = off"
+B 8 CommandComplete "SET"
+B 5 ReadyForQuery I
F 21 Parse "" "SELECT $1" 1 NNNN
F 19 Bind "" "" 0 1 1 '1' 1 0
F 6 Describe P ""
diff --git a/src/test/modules/libpq_pipeline/traces/singlerow.trace b/src/test/modules/libpq_pipeline/traces/singlerow.trace
index 029cd66581d..d918d2aa896 100644
--- a/src/test/modules/libpq_pipeline/traces/singlerow.trace
+++ b/src/test/modules/libpq_pipeline/traces/singlerow.trace
@@ -1,3 +1,27 @@
+F NN StartupMessage 3 2 "user" "SSSS" "database" "SSSS" "application_name" "SSSS"
+B NN ParameterStatus "IntervalStyle" "SSSS"
+B NN ParameterStatus "search_path" "SSSS"
+B NN ParameterStatus "is_superuser" "SSSS"
+B NN ParameterStatus "standard_conforming_strings" "SSSS"
+B NN ParameterStatus "session_authorization" "SSSS"
+B NN ParameterStatus "client_encoding" "SSSS"
+B NN ParameterStatus "server_version" "SSSS"
+B NN ParameterStatus "server_encoding" "SSSS"
+B NN ParameterStatus "in_hot_standby" "SSSS"
+B NN ParameterStatus "integer_datetimes" "SSSS"
+B NN ParameterStatus "TimeZone" "SSSS"
+B NN ParameterStatus "application_name" "SSSS"
+B NN ParameterStatus "default_transaction_read_only" "SSSS"
+B NN ParameterStatus "scram_iterations" "SSSS"
+B NN ParameterStatus "DateStyle" "SSSS"
+B 40 BackendKeyData NNNN 'BBBB'
+B 5 ReadyForQuery I
+F 27 Query "SET lc_messages TO "C""
+B 8 CommandComplete "SET"
+B 5 ReadyForQuery I
+F 35 Query "SET debug_parallel_query = off"
+B 8 CommandComplete "SET"
+B 5 ReadyForQuery I
F 38 Parse "" "SELECT generate_series(42, $1)" 0
F 20 Bind "" "" 0 1 2 '44' 1 0
F 6 Describe P ""
diff --git a/src/test/modules/libpq_pipeline/traces/transaction.trace b/src/test/modules/libpq_pipeline/traces/transaction.trace
index 1dcc2373c0b..9b79ae96237 100644
--- a/src/test/modules/libpq_pipeline/traces/transaction.trace
+++ b/src/test/modules/libpq_pipeline/traces/transaction.trace
@@ -1,3 +1,27 @@
+F NN StartupMessage 3 2 "user" "SSSS" "database" "SSSS" "application_name" "SSSS"
+B NN ParameterStatus "IntervalStyle" "SSSS"
+B NN ParameterStatus "search_path" "SSSS"
+B NN ParameterStatus "is_superuser" "SSSS"
+B NN ParameterStatus "standard_conforming_strings" "SSSS"
+B NN ParameterStatus "session_authorization" "SSSS"
+B NN ParameterStatus "client_encoding" "SSSS"
+B NN ParameterStatus "server_version" "SSSS"
+B NN ParameterStatus "server_encoding" "SSSS"
+B NN ParameterStatus "in_hot_standby" "SSSS"
+B NN ParameterStatus "integer_datetimes" "SSSS"
+B NN ParameterStatus "TimeZone" "SSSS"
+B NN ParameterStatus "application_name" "SSSS"
+B NN ParameterStatus "default_transaction_read_only" "SSSS"
+B NN ParameterStatus "scram_iterations" "SSSS"
+B NN ParameterStatus "DateStyle" "SSSS"
+B 40 BackendKeyData NNNN 'BBBB'
+B 5 ReadyForQuery I
+F 27 Query "SET lc_messages TO "C""
+B 8 CommandComplete "SET"
+B 5 ReadyForQuery I
+F 35 Query "SET debug_parallel_query = off"
+B 8 CommandComplete "SET"
+B 5 ReadyForQuery I
F 79 Query "DROP TABLE IF EXISTS pq_pipeline_tst;CREATE TABLE pq_pipeline_tst (id int)"
B NN NoticeResponse S "NOTICE" V "NOTICE" C "00000" M "table "pq_pipeline_tst" does not exist, skipping" F "SSSS" L "SSSS" R "SSSS" \x00
B 15 CommandComplete "DROP TABLE"
--
2.54.0