使用 postgres 将大量行从一个表移动到另一个新表的有效方法

Hir*_*tel 4 postgresql postgresql-performance

我正在使用PostgreSQL数据库进行实时项目。其中,我有一张有 8 列的表。该表包含数百万行,因此为了从表中更快地进行搜索,我想删除该表中的旧条目并将其存储到另一个新表中。

为此,我知道一种方法:

  • 首先选择一些行
  • 创建新表
  • 将此行存储在该表中
  • 比从主表中删除。

但是时间太长,效率不高。

所以我想知道在 postgresql 数据库中执行此操作的最佳方法是什么?

Postgresql 版本:9.4.2.
大约行数:8000000
我想移动行:2000000

Ego*_*gov 7

您可以使用 CTE(公用表表达式)在单个 SQL 语句中移动行(更多信息在文档中):

with delta as (
  delete from one_table where ...
  returning *
)
insert into another_table
select * from delta;
Run Code Online (Sandbox Code Playgroud)

但仔细想想你是否真的需要它。就像 a_horse_with_no_name 在评论中所说的那样,调整您的查询可能就足够了。