#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)'
Ссылки