Enz*_*ues 5 postgresql truncate plpgsql common-table-expression plpython
我在 postgresql 9.1.3 中使用以下命令将数据从临时临时表移动到 Web 应用程序(地理服务器)中使用的表,所有这些都在同一个数据库中。然后删除临时表。
截断 table_foo;
插入 table_foo
SELECT * FROM table_temp;
删除表 table_temp;
我想将它包装在一个事务中以允许并发。数据集小于 2000 行,截断比删除快。
目前,我正在将临时临时表导入我的数据库后手动执行 sql 命令。
小智 4
两者truncate都delete可以回滚(手册中清楚地记录了这一点)。
truncate- 由于其性质 - 在可见性方面有一些奇怪的地方。
有关详细信息,请参阅手册:http://www.postgresql.org/docs/current/static/sql-truncate.html(底部的警告)
如果您的应用程序可以接受table_foo在此过程中“空”的事实,则截断可能会更好(再次参见手册中的大红色框以获取解释)。如果您不想让应用程序注意到,您需要使用delete
要在事务中运行这些语句,只需将它们放入其中:
begin transaction;
delete from table_foo;
insert into ....
drop table_temp;
commit;
Run Code Online (Sandbox Code Playgroud)
是否在函数中执行此操作取决于您。
truncate/insert会比delete/更快insert,因为这样可以最大限度地减少生成的 WAL 量。