使用postgres

时间:2016-03-07 06:17:57

标签: postgresql postgresql-performance

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

为此,我知道一种方法:

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

但这需要太多时间而且效率不高。

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

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

2 个答案:

答案 0 :(得分:4)

这是一个用于在两个表之间复制数据的示例代码。  这里我使用了不同的DB,一个是我的生产数据库,另一个是我的测试数据库

INSERT INTO "Table2"
select * from dblink('dbname=DB1 dbname=DB2 user=postgres password=root', 
'select "col1","Col2" from "Table1"') 
as t1(a character varying,b character varying);

答案 1 :(得分:3)

您可以使用CTE(公用表表达式)在单个SQL语句(more in the documentation)中移动行:

with delta as (
  delete from one_table where ...
  returning *
)
insert into another_table
select * from delta;

但仔细想想你是否真的需要它。与评论中所述的a_horse_with_no_name一样,调整查询可能就足够了。