临时表数据创建后去了哪里?

Geo*_*e K 4 postgresql perl postgresql-extensions

据我所知,temp_buffers设置用于存储临时表数据的服务。

PGDATA但是,当我创建了一个临时表时,会立即在主数据库中为其创建文件。因此,我希望能就几个问题得到帮助。

  1. a.会发生什么
    ?临时表数据是否temp_buffers 足以存储临时表数据?

    b. 临时表数据是否temp_buffers 不足以存储临时表数据?

  2. 是否存在temp_buffers 设置不足而导致溢出的情况pgsql_tmp

Mel*_*kij 6

中的条目pg_classpg_attributes以及 中的其他相关数据pg_catalog)以及空的相关文件始终在每个 期间创建create temp table。我无法提及 postgresql 源代码中此行为清晰可见的地方。文件创建离create temp table. 可以从这里开始阅读

写入这些临时表的数据将存储在temp_buffers后端私有内存中的特殊内存结构中。工作原理与 类似shared_buffers,但更简单,因为我们不关心崩溃后此类临时数据的并发访问和恢复。

如果temp_buffers数据不够 -temp_buffers区域内的旧页面将被驱逐并写入相应的关系文件。

是否有任何情况下,没有足够的 temp_buffers 设置最终会溢出到 pgsql_tmp ?

没有永不。显式临时表存储在常规数据库目录中,t<backendOID>_文件名中带有可见前缀(例如$PGDATA/base/13709/t3_226351)。


请不要在 postgresql 中频繁创建或删除临时表(每秒数十次)。这会导致系统目录膨胀,从而减慢任何查询的速度。postgresql 中的临时表不是“免费的”。