postgresql 中的临时表在所有客户端会话中都可见吗?

问题描述 投票:0回答:3
我想创建一个临时表,以便能够将其连接到几个表,因为将这些表与建议的临时表的内容连接起来需要花费大量时间(获取临时表的内容非常耗时。重复一遍又一遍地花费越来越多的时间)。当我的需求完成时,我将删除临时表。 我想知道这些临时表在其他客户端会话中是否可见(我的要求是使它们仅对当前客户端会话可见)。我正在使用 postgresql。如果您能为我正在考虑的解决方案提出更好的替代方案,那就太好了。

sql performance postgresql join postgresql-performance
3个回答
8
投票
PostgreSQL 就是适合您的数据库。临时表比标准表做得更好。来自

文档

虽然

CREATE TEMPORARY TABLE

的语法与SQL标准类似,但效果并不一样。在标准中,临时表仅定义一次,并自动存在于需要它们的每个会话中(从空内容开始)。相反,PostgreSQL 要求每个会话为要使用的每个临时表发出自己的 
CREATE TEMPORARY TABLE 命令。这允许不同的会话将相同的临时表名称用于不同的目的,
而标准的方法限制给定临时表名称的所有实例具有相同的表结构。


4
投票
文档

临时表仅在当前会话中可见,并在数据库会话结束时自动删除。

如果指定

ON COMMIT

,临时表将在当前事务结束时自动删除。

如果您需要临时表的良好表统计信息,则必须显式调用 

ANALYZE

,因为这些统计信息不会自动收集。

    


0
投票

自动真空守护进程无法访问,因此无法真空或分析临时表。因此,应通过会话 SQL 命令执行适当的清理和分析操作。例如,如果要在复杂查询中使用临时表,则明智的做法是在填充临时表后对其运行 ANALYZE。

可以选择在 TEMPORARY 或 TEMP 之前写入 GLOBAL 或 LOCAL。目前这在 PostgreSQL 中没有什么区别,已被弃用

© www.soinside.com 2019 - 2024. All rights reserved.