Попытка запустить EXPLAIN ANALYZE с откатом - PullRequest
0 голосов
/ 02 ноября 2018

Я создаю программу на Java, которая должна автоматически собирать данные в операторах SQL перед их планированием. Программа сейчас запускает оператор EXPLAIN и анализирует результаты.

Мне нужен параметр времени, поэтому мне нужно работать с ANALYZE, но я не хочу влиять на какие-либо данные, поэтому мне нужно откатиться. Когда я пытаюсь запустить все это как один блок, как предложено в документации PostgreSQL, с:

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

Я не получаю результаты оператора EXPLAIN, скорее, я получаю, что этот блок запросов не затронул ни одной строки.

Так что я не уверен, что лучше всего получить эти данные. Моя мысль, возможно, состоит в том, чтобы создать функцию, в которой оператор является аргументом text и который возвращает таблицу, состоящую всего из 1 строки / столбца, содержащую вывод EXPLAIN, но на самом деле я не являюсь мастером функции PostgreSQL, поэтому более простой альтернативой является предпочтительнее.

Не совсем уверен, как это сделать. Любая помощь будет полезна!

1 Ответ

0 голосов
/ 03 ноября 2018

Когда вы говорите, что выполняете операторы & ldquo; как один блок & rdquo ;, вы, вероятно, подразумеваете, что выполняете три оператора в одном java.sql.Statement.execute().

Тогда вы увидите только набор результатов из последнего оператора, который будет ROLLBACK.

Скорее, вы должны сделать это так:

conn.setAutocommit(false);
java.sql.Resultset rs = conn.createStatement().executeQuery("EXPLAIN ...");
// retrieve the EXPLAIN result
conn.rollback();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...