如何从Postgres获取查询计划信息到JDBC

时间:2011-12-02 12:47:28

标签: java postgresql jdbc

我想从“解释”查询时获得的查询计划中捕获成本数字。有没有办法在Java ResultSet(或类似对象)中获取此数据?

3 个答案:

答案 0 :(得分:8)

当然,只需将其作为常规声明运行:

Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("explain analyze select * from foo");
while (rs.next())
{
   System.out.println(rs.getString(1));
}

答案 1 :(得分:2)

除了上面提供的答案之外,我建议您使用在PostgreSQL 9.0及更高版本中将EXPLAIN计划格式化为XML的能力。

EXPLAIN(分析,格式化xml)SELECT ...

这将为您提供解释输出,您可以通过将其作为XML进行操作来更轻松地使用Java。

答案 2 :(得分:0)

这是另一个有关PreparedStatement的示例。

赞:

PreparedStatement preparedStatement = connection.prepareStatement("EXPLAIN (ANALYZE true , VERBOSE true , BUFFERS true)" +
                "SELECT * FROM Table");

ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getString(1));
}

或带有绑定参数:

PreparedStatement preparedStatement = connection.prepareStatement("EXPLAIN (ANALYZE true , VERBOSE true , BUFFERS true)" +
                "SELECT * FROM Player WHERE id = ?");

preparedStatement.setLong(1, 1);

ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
      System.out.println(resultSet.getString(1));
}
相关问题