我正在使用 PostgreSQL 数据库进行实时项目。其中,我有一个包含8列的表。 这个表包含数百万行,所以为了从表中更快地搜索,我想删除并将此表中的旧条目存储到另一个新表中。
为此,我知道一种方法:
但这需要太多时间而且效率不高。
所以我想知道在postgresql数据库中执行此操作的最佳方法是什么?
Postgresql版本:9.4.2.
大约行数:8000000
我想移动行:2000000
答案 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一样,调整查询可能就足够了。