我怎样才能执行"解释"在PostgrSQL中使用绑定参数准备好查询的语句?

时间:2017-07-03 17:18:05

标签: postgresql

我希望能够对具有绑定参数的查询执行explain语句。例如:

EXPLAIN SELECT * FROM metasyntax WHERE id = $1;

当我尝试执行此操作时,出现以下错误:

ERROR: bind message supplies 0 parameters, but prepared statement "" requires 1

我理解它告诉我它要我为查询提供一个值。但是,我可能不一定知道答案。在其他SQL方言(如Oracle)中,它将生成一个解释计划,而无需我为参数提供值。

是否可以在不绑定实际值的情况下获得解释计划?谢谢!

2 个答案:

答案 0 :(得分:4)

假设参数是一个整数:

PREPARE x(integer) AS SELECT * FROM metasyntax WHERE id = $1;

然后运行以下六次,其中“42”是代表值:

EXPLAIN (ANALYZE, BUFFERS) EXECUTE x(42);

通常,PostgreSQL将切换到第六次运行的通用计划,您将看到包含占位符$1的计划。

答案 1 :(得分:1)

没有

允许优化器根据参数更改查询计划。想象一下,如果参数是null - 显然不会返回任何行,因此DB可能会立即返回空行集。

只需使用代表值。