Jdbc 尝试使用回滚运行解释分析

Jdbc 尝试使用回滚运行解释分析,jdbc,greenplum,Jdbc,Greenplum,我正在构建一个Java程序,它需要在调度SQL语句之前自动收集SQL语句上的数据。程序现在运行EXPLAIN语句并解析结果 我需要时间参数,因此需要使用ANALYZE运行,但我不想影响任何数据,因此需要回滚。正如PostgreSQL文档中所建议的那样,当我尝试将这一切作为一个块运行时,使用: BEGIN; EXPLAIN ANALYZE VERBOSE ...(statement) ROLLBACK; 我没有得到EXPLAIN语句的结果,而是得到这个查询块没有影响任何行 所以我不确定获取这些数

我正在构建一个Java程序,它需要在调度SQL语句之前自动收集SQL语句上的数据。程序现在运行
EXPLAIN
语句并解析结果

我需要时间参数,因此需要使用
ANALYZE
运行,但我不想影响任何数据,因此需要回滚。正如PostgreSQL文档中所建议的那样,当我尝试将这一切作为一个块运行时,使用:

BEGIN;
EXPLAIN ANALYZE VERBOSE ...(statement)
ROLLBACK;
我没有得到
EXPLAIN
语句的结果,而是得到这个查询块没有影响任何行

所以我不确定获取这些数据的最佳方法。我的想法可能是构建一个函数,其中语句是一个
text
参数,它返回一个只有1行/列的表,其中包含
EXPLAIN
输出,但我不是真正的PostgreSQL函数wiz,因此更简单的替代方法更可取


我不知道该怎么做。任何帮助都会有帮助

当您说您正在“作为一个块”运行语句时,您可能是指您正在一个
java.sql.Statement.execute()
中运行这三条语句

然后,您将只看到上一条语句中的结果集,它恰好是
ROLLBACK

相反,你应该这样做:

conn.setAutocommit(假);
java.sql.Resultset rs=conn.createStatement().executeQuery(“解释…”);
//检索解释结果
连接回滚();

您可能同时从语句和解释计划结果中获取更新计数,因此您需要调用以获取所有结果。请显示使用的代码。您是否尝试在连接上禁用自动提交,然后仅使用
execute()
发送
explain…
并使用
connection.rollback()执行回滚操作
?实际上使用的是Greenplum服务器,所以它在8.2之后被分叉。让我看看自动提交设置,我正在使用java.sql.DriverManager库和getConnection方法。使用{connection->connection.prepareStatement(query)。还有{preparedStatement->preparedStatement.executeQuery()。还有{resultSet->while(resultSet.next()){results.add(resultSet.getString(1))}}请编辑您的问题,不要在评论中发布相关信息。