Postgresql:我可以覆盖临时表的默认行为吗?

时间:2013-07-23 12:03:52

标签: database postgresql oncreate temp-tables

在我的数据库中我有各种临时表,我不想删除,这是临时表的默认行为,这些表在每次事务之后。

为了减少这种丢弃开销,我编写了以下临时表的定义

CREATE TEMPORARY TABLE TEMPTABLEINPOSTGRESDB (LIKE PERMTABLE INCLUDING INDEXES) ON COMMIT DELETE;
你可以告诉我这种表的行为吗? DB会清除表而不是每次丢弃它吗?

是否有任何替代方案可以实现下述功能?

应用程序在每个会话中添加少量记录,应用程序必须在会话完成后删除数据。在会话中间添加的数据不得对应用程序的任何其他线程可见。

编辑:读取会话而不是事务。

1 个答案:

答案 0 :(得分:1)

默认行为是在会话结束时删除临时表而不是事务。您无需执行任何操作即可在交易结束时将其保留。只是不要使用on commit

CREATE TEMPORARY TABLE TEMPTABLEINPOSTGRESDB (LIKE PERMTABLE INCLUDING INDEXES)

或使用默认的on commit preserve rows

如果您使用on commit delete,该表将被截断,并且不会在事务结束时删除,但仍会在会话结束时删除。

如果您需要在会话之间保留表,则需要永久表。如果数据特定于会话,则使用会话ID。或者KISS,只需在每个会话中创建和删除临时表。

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