在我的数据库中我有各种临时表,我不想删除,这是临时表的默认行为,这些表在每次事务之后。
为了减少这种丢弃开销,我编写了以下临时表的定义
CREATE TEMPORARY TABLE TEMPTABLEINPOSTGRESDB (LIKE PERMTABLE INCLUDING INDEXES) ON COMMIT DELETE;
你可以告诉我这种表的行为吗? DB会清除表而不是每次丢弃它吗?
是否有任何替代方案可以实现下述功能?
应用程序在每个会话中添加少量记录,应用程序必须在会话完成后删除数据。在会话中间添加的数据不得对应用程序的任何其他线程可见。
编辑:读取会话而不是事务。
答案 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