Анализ выходных данных команды EXPLAIN в PostgreSQL

#parsing #postgresql #sql-execution-plan

#анализ #postgresql #sql-план выполнения

Вопрос:

Я разрабатываю приложение, которое требует анализа планов выполнения (тех, которые создаются в качестве выходных данных путем выдачи команды EXPLAIN [query]). Известно ли вам о какой-либо библиотеке Java, которую я мог бы использовать для этой цели? Я нашел https://github.com/depesz/Pg—Explain но он построен на Perl.

Также другой вариант, который я рассматриваю, — использовать XML в формате EXPLAIN [query], который доступен в PostgreSQL 9.1. Однако в этом случае было бы лучше иметь доступную XML-схему сгенерированных планов.

Есть ли какое-либо другое решение, о котором я не знаю?

Комментарии:

1. Материал, созданный Хьюго Депешем, довольно фантастический. Я сомневаюсь, что вы найдете что-то еще, и уж точно ничего лучшего. Разве вы не можете просто вызвать его модули как веб-сервис или около того?

2. Обратите внимание, что выходные данные XML были добавлены в версии 9.0, а не 9.1

3. FWIW также поддерживается вывод в формате JSON и YAML.

4. @C.Ramseyer Хьюберт «Депеш» Lubaczewski

Ответ №1:

Вы получили правильный ответ прямо здесь. Для ваших автоматизированных нужд используйте XML или инструменты по адресу:https://github.com/depesz/Pg—Explain

Для остальных из нас интерактивная версия — настоящая находка, и я публикую ее здесь, чтобы люди могли ее найти:http://explain.depesz.com /

Справочная информация о самом explain приведена по адресу:http://www.postgresql.org/docs/current/static/sql-explain.html Но, похоже, нет ссылки на DTD или определенную схему для explain.

Комментарии:

1. Это также может быть полезно, если кому-то нужно проанализировать выходные данные сайта depesz: github.com/celuk /…

Ответ №2:

У меня было такое же требование к анализу выходных данных XML-плана команды Explain. Я использовал LibXML2 libray. Он прост в использовании и эффективен. Попробуйте это.

Ответ №3:

У меня есть аналогичное требование, которое решается с помощью psql и jq , например:

 psql $PG_URL -P pager=off -Aqt -c 'EXPLAIN (FORMAT JSON) SELECT version()' | jq
  

Вы также можете перейти на другие языки программирования, с которыми вы знакомы, например:

 psql $PG_URL -P pager=off -Aqt -c 'EXPLAIN (FORMAT JSON) SELECT version()' |
  ruby -rjson -e 'pp JSON.parse($stdin.read)'
  

Ссылки