小编Enz*_*ues的帖子

在事务中包装 postgresql 命令:truncate vs delete 或 upsert/merge

我在 postgresql 9.1.3 中使用以下命令将数据从临时临时表移动到 Web 应用程序(地理服务器)中使用的表,所有这些都在同一个数据库中。然后删除临时表。

  1. 截断 table_foo;

  2. 插入 table_foo

    SELECT * FROM table_temp;

  3. 删除表 table_temp;

我想将它包装在一个事务中以允许并发。数据集小于 2000 行,截断比删除快。

  • 在事务中运行这些命令的最佳方式是什么?
  • 是否建议在 CTE 中创建函数或编写 UPSERT/MERGE 等?
  • 删除所有行然后从临时表批量插入而不是 TRUNCATE 会更好吗?
  • 在允许回滚 TRUNCATE 或 DELETE 的 postgres 中?
  • 临时表每天通过在 arcpy 中编写的 ETL 提供,我如何在 postgres 中自动执行截断/删除/批量插入部分?
  • 我愿意使用 PL/pgsql、PL/python(或为 postgres 推荐的 py)

目前,我正在将临时临时表导入我的数据库后手动执行 sql 命令。

postgresql truncate plpgsql common-table-expression plpython

5
推荐指数
1
解决办法
3992
查看次数