查询执行计划是否存储在 postgresql 中的任何位置?

Are query execution plans stored anywhere in postgresql?

我想弄清楚 PostgreSQL 查询执行计划是否存储在某处(可能是对 pg_stat_statementspg_prepared_statements 的补充),它们的可用时间比会话持续时间长.我知道 PREPARE 确实在 pg_prepared_statements 中缓存了 sql 语句,但据我所知,该计划本身似乎在任何视图中都不可用。

我不确定是否有文档解释 PostgreSQL 查询计划的生命周期,但从 EXPLAIN 文档中的内容来看,PostgreSQL 根本不缓存查询计划。这准确吗?

谢谢!

PostgreSQL 没有用于执行计划的共享存储,因此它们不能跨数据库会话重用。

有两种方法可以在会话中缓存执行计划:

  1. 将准备好的语句与 SQL 语句 PREPAREEXECUTE 一起使用。该计划将在准备好的语句的生命周期内缓存,通常直到您的会话结束。

  2. 使用PL/pgSQL函数。此类函数中所有静态 SQL 语句(即 不是 运行 和 EXECUTE 的语句)的计划将被缓存会话生命周期。

除此之外,Postgre 中不缓存执行计划SQL。