Skip to content

Commit 627c79a

Browse files
committed
Add compute_query_id = regress
"regress" is a new mode added to compute_query_id aimed at facilitating regression testing when a module computing query IDs is loaded into the backend, like pg_stat_statements. It works the same way as "auto", meaning that query IDs are computed if a module enables it, except that query IDs are hidden in EXPLAIN outputs to ensure regression output stability. Like any GUCs of the kind (force_parallel_mode, etc.), this new configuration can be added to an instance's postgresql.conf, or just passed down with PGOPTIONS at command level. compute_query_id uses an enum for its set of option values, meaning that this addition ensures ABI compatibility. Using this new configuration mode allows installcheck-world to pass when running the tests on an instance with pg_stat_statements enabled, stabilizing the test output while checking the paths doing query ID computations. Reported-by: Anton Melnikov Reviewed-by: Julien Rouhaud Discussion: https://postgr.es/m/1634283396.372373993@f75.i.mail.ru Discussion: https://postgr.es/m/YgHlxgc/OimuPYhH@paquier.xyz Backpatch-through: 14
1 parent 7bbfe59 commit 627c79a

File tree

4 files changed

+15
-4
lines changed

4 files changed

+15
-4
lines changed

doc/src/sgml/config.sgml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7680,9 +7680,12 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv;
76807680
method is not acceptable. In this case, in-core computation
76817681
must be always disabled.
76827682
Valid values are <literal>off</literal> (always disabled),
7683-
<literal>on</literal> (always enabled) and <literal>auto</literal>,
7683+
<literal>on</literal> (always enabled), <literal>auto</literal>,
76847684
which lets modules such as <xref linkend="pgstatstatements"/>
7685-
automatically enable it.
7685+
automatically enable it, and <literal>regress</literal> which
7686+
has the same effect as <literal>auto</literal>, except that the
7687+
query identifier is hidden in the <literal>EXPLAIN</literal> output
7688+
to facilitate automated regression testing.
76867689
The default is <literal>auto</literal>.
76877690
</para>
76887691
<note>

src/backend/commands/explain.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -604,7 +604,13 @@ ExplainOnePlan(PlannedStmt *plannedstmt, IntoClause *into, ExplainState *es,
604604
/* Create textual dump of plan tree */
605605
ExplainPrintPlan(es, queryDesc);
606606

607-
if (es->verbose && plannedstmt->queryId != UINT64CONST(0))
607+
/*
608+
* COMPUTE_QUERY_ID_REGRESS means COMPUTE_QUERY_ID_AUTO, but we don't show
609+
* the queryid in any of the EXPLAIN plans to keep stable the results
610+
* generated by regression test suites.
611+
*/
612+
if (es->verbose && plannedstmt->queryId != UINT64CONST(0) &&
613+
compute_query_id != COMPUTE_QUERY_ID_REGRESS)
608614
{
609615
/*
610616
* Output the queryid as an int64 rather than a uint64 so we match

src/backend/utils/misc/guc.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,7 @@ static const struct config_enum_entry backslash_quote_options[] = {
409409
*/
410410
static const struct config_enum_entry compute_query_id_options[] = {
411411
{"auto", COMPUTE_QUERY_ID_AUTO, false},
412+
{"regress", COMPUTE_QUERY_ID_REGRESS, false},
412413
{"on", COMPUTE_QUERY_ID_ON, false},
413414
{"off", COMPUTE_QUERY_ID_OFF, false},
414415
{"true", COMPUTE_QUERY_ID_ON, true},

src/include/utils/queryjumble.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ enum ComputeQueryIdType
5757
{
5858
COMPUTE_QUERY_ID_OFF,
5959
COMPUTE_QUERY_ID_ON,
60-
COMPUTE_QUERY_ID_AUTO
60+
COMPUTE_QUERY_ID_AUTO,
61+
COMPUTE_QUERY_ID_REGRESS
6162
};
6263

6364
/* GUC parameters */

0 commit comments

Comments
 (0)