PostgreSQL临时表在exist和not exist之间交替

PostgreSQL临时表在exist和not exist之间交替,postgresql,Postgresql,我使用的是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; 每次我运行select而不重新运行create时,它会在成功选

我使用的是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;
每次我运行select而不重新运行create时,它会在成功选择值和error with table不存在之间切换

有人能帮我了解发生了什么事吗

临时工

如果指定,该表将创建为临时表。短暂的 在会话结束时自动删除表,或 (可选)在当前事务结束时,请参见提交 在下面具有相同名称的现有永久表不可见 在临时表存在的情况下复制到当前会话,除非 使用架构限定名称引用。在数据库上创建的任何索引 临时表也是自动临时的

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

提交

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

保留行

交易结束时不采取特别行动。这是 默认行为

删除行

临时表中的所有行将在每行结束时删除 事务块。从本质上讲,每次都会进行自动截断 承诺

下降

临时表将被丢弃在当前事务块的末尾


无法使用同一版本的数据库服务器和“psql”命令行客户端复制此内容。