尝试 运行 EXPLAIN ANALYZE 回滚

Trying to run EXPLAIN ANALYZE with rollback

我正在构建一个 Java 程序,该程序需要在安排 SQL 语句之前自动收集数据。该程序现在 运行 是一个 EXPLAIN 语句并解析结果。

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

BEGIN;
EXPLAIN ANALYZE VERBOSE ...(statement)
ROLLBACK;

我没有得到 EXPLAIN 语句的结果,而是我知道这个查询块没有影响任何行。

所以我不确定获取这些数据的最佳方式。我的想法可能是构建一个函数,其中语句是一个 text 参数,而 returns 一个 table 只是 1 row/column 包含 EXPLAIN 输出,但是我不是真正的 PostgreSQL 函数专家,所以更简单的替代方案是可取的。

不太确定该怎么做。任何帮助都会有所帮助!

当你说你是 运行 语句“作为一个块”时,你可能的意思是你是 运行 三个语句合而为一 java.sql.Statement.execute()

那么你只会看到最后一条语句的结果集,正好是ROLLBACK.

相反,你应该这样做:

conn.setAutocommit(false);
java.sql.Resultset rs = conn.createStatement().executeQuery("EXPLAIN ...");
// retrieve the EXPLAIN result
conn.rollback();