我正在使用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)时,它会在成功选择值和表之间的错误之间交替显示!
任何人都可以帮我理解发生了什么吗?
答案 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
临时表将在当前事务块的末尾被删除。