我正在使用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 都会自动完成 犯。
落
临时表将在当前事务块的末尾删除。