Add compute_query_id = regress
authorMichael Paquier
Tue, 22 Feb 2022 01:23:49 +0000 (10:23 +0900)
committerMichael Paquier
Tue, 22 Feb 2022 01:23:49 +0000 (10:23 +0900)
"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/[email protected]
Backpatch-through: 14

doc/src/sgml/config.sgml
src/backend/commands/explain.c
src/backend/utils/misc/guc.c
src/include/utils/queryjumble.h

index d046614d76526b7cfb9a45c09819e3077d4b8cf1..18cf72db0514735a499c35baf97a55d860617dad 100644 (file)
@@ -7680,9 +7680,12 @@ COPY postgres_log FROM '/full/path/to/logfile.csv' WITH csv;
         method is not acceptable.  In this case, in-core computation
         must be always disabled.
         Valid values are off (always disabled),
-        on (always enabled) and auto,
+        on (always enabled), auto,
         which lets modules such as 
-        automatically enable it.
+        automatically enable it, and regress which
+        has the same effect as auto, except that the
+        query identifier is hidden in the EXPLAIN output
+        to facilitate automated regression testing.
         The default is auto.
        
        
index 81a227d8b8d6a10ca25e0947e97e40c34a484c2d..70551522dac256a55f5b74cfa2ad8b4e50bb6ec1 100644 (file)
@@ -604,7 +604,13 @@ ExplainOnePlan(PlannedStmt *plannedstmt, IntoClause *into, ExplainState *es,
    /* Create textual dump of plan tree */
    ExplainPrintPlan(es, queryDesc);
 
-   if (es->verbose && plannedstmt->queryId != UINT64CONST(0))
+   /*
+    * COMPUTE_QUERY_ID_REGRESS means COMPUTE_QUERY_ID_AUTO, but we don't show
+    * the queryid in any of the EXPLAIN plans to keep stable the results
+    * generated by regression test suites.
+    */
+   if (es->verbose && plannedstmt->queryId != UINT64CONST(0) &&
+       compute_query_id != COMPUTE_QUERY_ID_REGRESS)
    {
        /*
         * Output the queryid as an int64 rather than a uint64 so we match
index 6652a60ec31e95d5d05de1cbdea8a4ed18c7cb94..b1d8317aa22bb02c02adead0c0ef518c1065a6eb 100644 (file)
@@ -409,6 +409,7 @@ static const struct config_enum_entry backslash_quote_options[] = {
  */
 static const struct config_enum_entry compute_query_id_options[] = {
    {"auto", COMPUTE_QUERY_ID_AUTO, false},
+   {"regress", COMPUTE_QUERY_ID_REGRESS, false},
    {"on", COMPUTE_QUERY_ID_ON, false},
    {"off", COMPUTE_QUERY_ID_OFF, false},
    {"true", COMPUTE_QUERY_ID_ON, true},
index 7af6652f3e0be710fdd4cf4266258251f97a5b82..af5d999b9cb82df88330d7bf2ab522b74e7dc192 100644 (file)
@@ -57,7 +57,8 @@ enum ComputeQueryIdType
 {
    COMPUTE_QUERY_ID_OFF,
    COMPUTE_QUERY_ID_ON,
-   COMPUTE_QUERY_ID_AUTO
+   COMPUTE_QUERY_ID_AUTO,
+   COMPUTE_QUERY_ID_REGRESS
 };
 
 /* GUC parameters */