PostgreSQL TEMP 表在存在和不存在之间交替



我正在使用PostgreSQL 9.6.2,在Mac上带有Toad客户端。 我首先创建了一个简单的临时表,如下所示:

CREATE TEMP TABLE demo_pairs
AS
WITH t (name, value) AS (VALUES ('a', 'b'), ('c', 'd'))
SELECT * FROM t;

然后当我跑步时发生了一些奇怪的事情:

SELECT * FROM demo_pairs;

每次我运行选择(无需重新运行创建)时,它都会在成功选择值和表错误不存在之间交替!

谁能帮我了解发生了什么?

https://www.postgresql.org/docs/current/static/sql-createtable.html

临时

或临时

如果指定,则将表创建为临时表。临时 在会话结束时自动删除表,或者 (可选)在当前事务结束时(请参阅提交时 下面)。具有相同名称的现有永久表不可见 在临时表存在时到当前会话,除非它们 使用架构限定名称引用。在 临时表也自动是临时的。

如果您使用的会话池程序可以为您关闭会话或只是自己关闭会话(例如网络问题),则临时表将被删除。 您也可以按照在事务结束时删除它的方式创建它:

提交时

事务块末尾临时表的行为可以 使用 ON 提交进行控制。这三个选项是:

保留行

交易结束时不执行任何特殊操作。这是 默认行为。

删除行

临时表中的所有行都将在每个行的末尾删除 事务块。从本质上讲,每个 TRUNCATE 都会自动完成 犯。

临时表将在当前事务块的末尾删除。

相关内容

最新更新