0

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

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

CREATE TEMPORARY TABLE TEMPTABLEINPOSTGRESDB (LIKE PERMTABLE INCLUDING INDEXES) ON COMMIT DELETE;

你能告诉我这种桌子的行为吗?DB会清除表而不是每次都删除它吗?

是否有任何替代解决方案来实现下面提到的功能?

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

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

4

1 回答 1

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

于 2013-07-23T12:18:20.570 回答