我希望能够在具有绑定参数的查询上执行解释语句。例如:
EXPLAIN SELECT * FROM metasyntax WHERE id = $1;
当我尝试执行此操作时,出现以下错误:
ERROR: bind message supplies 0 parameters, but prepared statement "" requires 1
我知道它告诉我它希望我为查询提供一个值。但是,我可能不一定知道答案。在其他SQL方言(如Oracle(中,它将生成一个解释计划,而无需我为参数提供值。
是否可以在不绑定到实际值的情况下获得解释计划?谢谢!
假设参数是一个整数:
PREPARE x(integer) AS SELECT * FROM metasyntax WHERE id = $1;
然后运行以下六次,其中"42"是代表值:
EXPLAIN (ANALYZE, BUFFERS) EXECUTE x(42);
通常 PostgreSQL 会在第六次运行时切换到通用计划,您将看到一个包含占位符的计划$1
。
No.
允许优化器根据参数更改查询计划。想象一下,如果参数是null
的 - 很明显不会返回任何行,因此数据库可能会立即返回一个空行集。
只需使用代表性值。