How to get query plan information from Postgres into JDBC

后端 未结 3 1892
眼角桃花
眼角桃花 2020-12-31 23:37

I want to capture the cost numbers from the query plan you get when you \'Explain\' a query. Is there any way to get at this data inside of a Java ResultSet(or similar obje

相关标签:
3条回答
  • 2021-01-01 00:02

    In addition to the answer supplied above, I would suggest that you make use of the ability to format EXPLAIN plans as XML in PostgreSQL 9.0 and later.

    EXPLAIN ( analyze on, format xml ) SELECT ...

    This will give you explain output you can more easily work with in Java by manipulating it as XML.

    0 讨论(0)
  • 2021-01-01 00:12

    Sure, just run it as a regular statement:

    Statement stmt = connection.createStatement();
    ResultSet rs = stmt.executeQuery("explain analyze select * from foo");
    while (rs.next())
    {
       System.out.println(rs.getString(1));
    }
    
    0 讨论(0)
  • 2021-01-01 00:15

    An other example with PreparedStatement, this time.

    Like this:

    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));
    }
    

    Or with a bind parameter:

    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));
    }
    
    0 讨论(0)
提交回复
热议问题