mirror of https://github.com/citusdata/citus.git
EXPLAIN generic_plan NOT supported in Citus (#7825)
We thought we provided support for this inpull/7819/headb8c493f2c4
However the use of parameters in SQL is not supported in Citus. Since generic plan queries use parameters, we can't support for now. Relevant PG16 commit https://github.com/postgres/postgres/commit/3c05284 Fixes #7813 with proper error message (cherry picked from commit0a6adf4ccc
)
parent
a5780c519f
commit
6d2a329da6
|
@ -190,6 +190,14 @@ PG_FUNCTION_INFO_V1(worker_save_query_explain_analyze);
|
|||
void
|
||||
CitusExplainScan(CustomScanState *node, List *ancestors, struct ExplainState *es)
|
||||
{
|
||||
#if PG_VERSION_NUM >= PG_VERSION_16
|
||||
if (es->generic)
|
||||
{
|
||||
ereport(ERROR, (errmsg(
|
||||
"EXPLAIN GENERIC_PLAN is currently not supported for Citus tables")));
|
||||
}
|
||||
#endif
|
||||
|
||||
CitusScanState *scanState = (CitusScanState *) node;
|
||||
DistributedPlan *distributedPlan = scanState->distributedPlan;
|
||||
EState *executorState = ScanStateGetExecutorState(scanState);
|
||||
|
@ -1021,18 +1029,12 @@ 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,
|
||||
|
|
|
@ -81,29 +81,9 @@ SELECT create_distributed_table('tenk1', 'unique1');
|
|||
(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;
|
||||
EXPLAIN (GENERIC_PLAN) SELECT unique1 FROM tenk1 WHERE thousand = $1;
|
||||
ERROR: EXPLAIN GENERIC_PLAN is currently not supported for Citus tables
|
||||
EXPLAIN (GENERIC_PLAN, ANALYZE) SELECT unique1 FROM tenk1 WHERE thousand = $1;
|
||||
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
|
||||
|
|
|
@ -58,8 +58,8 @@ CREATE TABLE tenk1 (
|
|||
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;
|
||||
EXPLAIN (GENERIC_PLAN) SELECT unique1 FROM tenk1 WHERE thousand = $1;
|
||||
EXPLAIN (GENERIC_PLAN, ANALYZE) SELECT unique1 FROM tenk1 WHERE thousand = $1;
|
||||
SET citus.log_remote_commands TO off;
|
||||
|
||||
-- Proper error when creating statistics without a name on a Citus table
|
||||
|
|
Loading…
Reference in New Issue