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

时间:2017-05-10 13:20:04

标签: postgresql

我正在使用PostgreSQL 9.6.2,在Mac上使用Toad客户端。自动提交设置为ON。 我首先创建了一个简单的临时表:

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)时,它会在成功选择值和表之间的错误之间交替显示!

任何人都可以帮我理解发生了什么吗?

1 个答案:

答案 0 :(得分:1)

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

  

TEMPORARY或TEMP

     

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

如果您使用可以为您关闭会话或仅自行关闭会话的会话池(例如网络问题),则临时表将被删除。 您也可以按照在事务端丢弃的方式创建它:

  

ON COMMIT

     

事务块结尾处的临时表的行为可以   使用ON COMMIT控制。这三个选项是:

     

保留行

     

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

     

DELETE ROWS

     

临时表中的所有行都将在每个行的末尾删除   交易块。基本上,每个都完成一个自动TRUNCATE   提交。

     

DROP

     

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