diff --git a/src/backend/distributed/planner/multi_explain.c b/src/backend/distributed/planner/multi_explain.c index ec0282840..94d125f41 100644 --- a/src/backend/distributed/planner/multi_explain.c +++ b/src/backend/distributed/planner/multi_explain.c @@ -992,12 +992,18 @@ BuildRemoteExplainQuery(char *queryString, ExplainState *es) appendStringInfo(explainQuery, "EXPLAIN (ANALYZE %s, VERBOSE %s, " "COSTS %s, BUFFERS %s, WAL %s, " +#if PG_VERSION_NUM >= PG_VERSION_16 + "GENERIC_PLAN %s, " +#endif "TIMING %s, SUMMARY %s, FORMAT %s) %s", es->analyze ? "TRUE" : "FALSE", es->verbose ? "TRUE" : "FALSE", es->costs ? "TRUE" : "FALSE", es->buffers ? "TRUE" : "FALSE", es->wal ? "TRUE" : "FALSE", +#if PG_VERSION_NUM >= PG_VERSION_16 + es->generic ? "TRUE" : "FALSE", +#endif es->timing ? "TRUE" : "FALSE", es->summary ? "TRUE" : "FALSE", formatStr, diff --git a/src/test/regress/expected/pg16.out b/src/test/regress/expected/pg16.out index 304d75635..4a8703ad7 100644 --- a/src/test/regress/expected/pg16.out +++ b/src/test/regress/expected/pg16.out @@ -65,6 +65,46 @@ SET citus.log_remote_commands TO OFF; -- only verifying it works and not printing log -- remote commands because it can be flaky VACUUM (ONLY_DATABASE_STATS); +-- New GENERIC_PLAN option in EXPLAIN +-- Relevant PG commit: +-- https://github.com/postgres/postgres/commit/3c05284 +CREATE TABLE tenk1 ( + unique1 int4, + unique2 int4, + thousand int4 +); +SELECT create_distributed_table('tenk1', 'unique1'); + create_distributed_table +--------------------------------------------------------------------- + +(1 row) + +SET citus.log_remote_commands TO on; +EXPLAIN (GENERIC_PLAN) SELECT unique1 FROM tenk1 WHERE thousand = 1000; +NOTICE: issuing BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED;SELECT assign_distributed_transaction_id(xx, xx, 'xxxxxxx'); +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +NOTICE: issuing SAVEPOINT citus_explain_savepoint +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +NOTICE: issuing EXPLAIN (ANALYZE FALSE, VERBOSE FALSE, COSTS TRUE, BUFFERS FALSE, WAL FALSE, GENERIC_PLAN TRUE, TIMING FALSE, SUMMARY FALSE, FORMAT TEXT) SELECT unique1 FROM pg16.tenk1_950001 tenk1 WHERE (thousand OPERATOR(pg_catalog.=) 1000) +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +NOTICE: issuing ROLLBACK TO SAVEPOINT citus_explain_savepoint +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +NOTICE: issuing COMMIT +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx + QUERY PLAN +--------------------------------------------------------------------- + Custom Scan (Citus Adaptive) (cost=0.00..0.00 rows=0 width=0) + Task Count: 1 + Tasks Shown: All + -> Task + Node: host=localhost port=xxxxx dbname=regression + -> Seq Scan on tenk1_950001 tenk1 (cost=0.00..35.50 rows=10 width=4) + Filter: (thousand = 1000) +(7 rows) + +EXPLAIN (GENERIC_PLAN, ANALYZE) SELECT unique1 FROM tenk1 WHERE thousand = 1000; +ERROR: EXPLAIN options ANALYZE and GENERIC_PLAN cannot be used together +SET citus.log_remote_commands TO off; -- Proper error when creating statistics without a name on a Citus table -- Relevant PG commit: -- https://github.com/postgres/postgres/commit/624aa2a13bd02dd584bb0995c883b5b93b2152df diff --git a/src/test/regress/sql/pg16.sql b/src/test/regress/sql/pg16.sql index abf29d932..85df9eabb 100644 --- a/src/test/regress/sql/pg16.sql +++ b/src/test/regress/sql/pg16.sql @@ -45,6 +45,22 @@ SET citus.log_remote_commands TO OFF; -- remote commands because it can be flaky VACUUM (ONLY_DATABASE_STATS); +-- New GENERIC_PLAN option in EXPLAIN +-- Relevant PG commit: +-- https://github.com/postgres/postgres/commit/3c05284 + +CREATE TABLE tenk1 ( + unique1 int4, + unique2 int4, + thousand int4 +); +SELECT create_distributed_table('tenk1', 'unique1'); + +SET citus.log_remote_commands TO on; +EXPLAIN (GENERIC_PLAN) SELECT unique1 FROM tenk1 WHERE thousand = 1000; +EXPLAIN (GENERIC_PLAN, ANALYZE) SELECT unique1 FROM tenk1 WHERE thousand = 1000; +SET citus.log_remote_commands TO off; + -- Proper error when creating statistics without a name on a Citus table -- Relevant PG commit: -- https://github.com/postgres/postgres/commit/624aa2a13bd02dd584bb0995c883b5b93b2152df