Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查询执行计划是否存储在postgresql中的任何位置?_Postgresql_Explain - Fatal编程技术网

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

查询执行计划是否存储在postgresql中的任何位置?,postgresql,explain,Postgresql,Explain,我试图弄清楚PostgreSQL查询执行计划是否以某种方式存储在某个地方(可能是作为pg_stat_语句和pg_prepared_语句),它们的可用时间超过会话的持续时间。我知道,PREPARE确实在pg_prepared_statements中缓存了sql语句,尽管就我所知,该计划本身似乎在任何视图中都不可用 我不确定是否有文档解释了PostgreSQL查询计划的生命周期,但从文档中听起来,PostgreSQL根本不缓存查询计划。这准确吗 谢谢 PostgreSQL没有用于执行计划的共享存储,

我试图弄清楚PostgreSQL查询执行计划是否以某种方式存储在某个地方(可能是作为
pg_stat_语句
pg_prepared_语句
),它们的可用时间超过会话的持续时间。我知道,
PREPARE
确实在
pg_prepared_statements
中缓存了sql语句,尽管就我所知,该计划本身似乎在任何视图中都不可用

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


谢谢

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

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

  • 将准备好的语句与SQL语句
    PREPARE
    EXECUTE
    一起使用。计划将在准备好的语句的生命周期内被缓存,通常直到会话结束

  • 使用PL/pgSQL函数。在这样的函数中,所有静态SQL语句(即不与
    EXECUTE
    一起运行的语句)的计划都将在会话生命周期内缓存


  • 除此之外,执行计划不会缓存在PostgreSQL中。

    您可以使用
    auto\u explain