如何获得带参数的 PostgreSQL 执行计划?

问题描述 投票:0回答:0

我的应用程序有无数的查询,我想得到其中一些的执行计划。大多数如果不是 所有的查询都有多个参数,我找不到如何在 PostgreSQL 中获取任何非平凡查询的执行计划。

真实的案例要复杂得多,但这里有一个简单的、有代表性的查询案例(为简单起见,只有一个参数):

Connection conn = DriverManager.getConnection("...", "...", "...");

PreparedStatement ps1 = conn.prepareStatement(
  "prepare x as select * from documents where content = $1");
ps1.execute();

PreparedStatement ps2 = conn.prepareStatement(
  "explain (format json) execute x (?)");
ps2.setString(1, "long content here...");
ResultSet rs = ps2.executeQuery(); // Error here!

while (rs.next()) {
  System.out.println(rs.getString(1));
}

当我运行它时,出现错误:

错误:没有参数 $1 位置:34

如果我将

$1
替换为
'a'
一切正常,我得到了结果。但是,如果我尝试使用一个参数,如果不起作用。

我试过了 使用

null
而不是
?
并且它不会崩溃,但它会返回一个错误的执行计划;似乎它以某种方式使逻辑短路并返回完全脱离现实的东西。

我做错了什么?

sql database postgresql sql-execution-plan
© www.soinside.com 2019 - 2024. All rights reserved.