【问题标题】:PostgreSQL TEMP table alternating between exist and not existPostgreSQL TEMP 表在存在和不存在之间交替
【发布时间】:2017-05-10 13:20:03
【问题描述】:

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

CREATE TEMP TABLE demo_pairs
AS
WITH t (name, value) AS (VALUES ('a', 'b'), ('c', 'd'))
SELECT * FROM t;

然后我跑的时候发生了一些奇怪的事情:

SELECT * FROM demo_pairs;

每次我运行选择(不重新运行创建)时,它会在成功选择值和不存在表的错误之间交替!

谁能帮我理解发生了什么?

【问题讨论】:

  • 无法使用相同版本的数据库服务器和“psql”命令行客户端重现此问题。

标签: postgresql


【解决方案1】:

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

临时或临时

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

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

提交时

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

保留行

交易结束时不采取任何特殊措施。这是 默认行为。

删除行

临时表中的所有行都会在每行结束时被删除 交易块。本质上,每次都会执行自动 TRUNCATE 提交。

放下

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

【讨论】:

    猜你喜欢
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2022-01-13
    • 2022-01-24
    • 2013-11-08
    • 1970-01-01
    相关资源
    最近更新 更多