【问题标题】:How to get query plan information from Postgres into JDBC如何从 Postgres 获取查询计划信息到 JDBC
【发布时间】:2011-12-02 12:47:28
【问题描述】:

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

【问题讨论】:

    标签: java postgresql jdbc


    【解决方案1】:

    当然,只需将其作为常规语句运行即可:

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

    【讨论】:

    • 我正在调试器中检查 ResultSet 对象 (rs),但在任何地方都没有看到。感谢您的简单回答。
    【解决方案2】:

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

    解释(分析,格式化xml)选择...

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

    【讨论】:

      【解决方案3】:

      这次是 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));
      }
      

      【讨论】:

        猜你喜欢
        • 2011-05-21
        • 1970-01-01
        • 2012-09-18
        • 1970-01-01
        • 2016-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多