【发布时间】:2018-11-02 19:46:36
【问题描述】:
我正在构建一个 Java 程序,该程序需要在调度 SQL 语句之前自动收集数据。该程序现在运行EXPLAIN 语句并解析结果。
我需要时间参数,所以我需要用ANALYZE运行,但是我不想影响任何数据,所以我需要回滚。当我尝试按照 PostgreSQL 文档中的建议将这一切作为一个块运行时,使用:
BEGIN;
EXPLAIN ANALYZE VERBOSE ...(statement)
ROLLBACK;
我没有得到EXPLAIN 语句的结果,而是我知道这个查询块没有影响任何行。
所以我不确定获取这些数据的最佳方式。我的想法可能是构建一个函数,其中语句是 text 参数,并返回一个只有 1 行/列的表,其中包含 EXPLAIN 输出,但我并不是真正的 PostgreSQL 函数向导,所以更简单的选择是最好的。
不太清楚该怎么做。任何帮助都会有所帮助!
【问题讨论】:
-
您可能会从语句 和 解释计划结果中获得 both 更新计数,因此您需要调用
stmt.getMoreResults()来获得这一切。 -
请出示使用的代码。
-
您是否尝试在连接上禁用自动提交,然后仅使用
execute()发送explain...并使用Connection.rollback()进行回滚? -
其实用的是Greenplum服务器,所以8.2之后fork了。让我看看自动提交设置,我正在使用 java.sql.DriverManager 库,以及带有 .use { connection -> connection.prepareStatement(query).also {prepareStatement ->preparedStatement.executeQuery().also 的 getConnection 方法{ resultSet -> while (resultSet.next()) { results.add(resultSet.getString(1)) } } } }
-
请编辑您的问题,不要在 cmets 中发布相关信息。