Вопрос:
Я пытаюсь выяснить, хранятся ли планы выполнения запросов PostgreSQL где-нибудь (возможно, как бесплатный для pg_stat_statements и pg_prepared_statements) таким образом, чтобы они были доступны дольше, чем продолжительность сеанса. Я понимаю, что PREPARE pg_prepared_statements инструкцию sql в pg_prepared_statements, хотя сам план, похоже, не доступен ни в каком представлении, насколько я могу судить.
Я не уверен, есть ли документ, объясняющий жизненный цикл плана запросов для PostgreSQL, но из того, что он звучит в документации EXPLAIN, PostgreSQL вообще не кэширует планы запросов. Это точно?
Спасибо!
Лучший ответ:
PostgreSQL не имеет общего хранилища для планов выполнения, поэтому их нельзя использовать повторно в сеансах базы данных.
Существует два способа кэширования плана выполнения в сеансе:
-
Используйте подготовленные операторы с инструкциями SQL PREPARE и EXECUTE. План будет кэшироваться в течение срока действия подготовленного заявления, как правило, до окончания сеанса.
-
Используйте функции PL/pgSQL. Планы для всех статических операторов SQL (то есть операторов, которые не запускаются с EXECUTE) в такой функции будут кэшироваться для времени жизни сеанса.
Кроме того, планы выполнения не кэшируются в PostgreSQL.