PostgreSQL临时表在exist和not exist之间交替
我使用的是PostgreSQL 9.6.2,Mac上有Toad客户端。自动提交设置为打开。 我首先创建了一个简单的临时表,如下所示: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时,它会在成功选
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”命令行客户端复制此内容。