0

我需要定期将数据从 TMP 数据库复制到远程 PROD 数据库,并在列中进行一些数据修改。当我使用来自 PROD 数据库的 postgres_fdw 扩展(带有映射外部模式)时,复制一百万条记录的过程持续 6 分钟。

insert into prod.foreign_schema.foreign_table 
(select * from tmp.public.table limit 1000000);

但是,当我使用 dblink 从 PROD 数据库中复制同一张表时(SQL 在 PROD 数据库上运行,而不是在 TEMP 上),该过程持续 20 秒。

insert into prod.public.table 
(select * from dblink('host=192.1... port=5432 dbname=... user=… password=…. connect_timeout=2', 'select * from tmp.production.table limit 1000000') as tab (id integer…..)
);

如何优化和缩短从 TEMP 数据库复制数据的过程?

我必须在 TMP 数据库上运行 SQL 命令。TMP 和 PROD 数据库在同一个版本中 (10)。

4

1 回答 1

2

第一条语句将有效地运行许多小插入,尽管使用的是准备好的语句,因此您不必每次都有计划开销。因此,您将在两台服务器之间进行更多往返,这可能是造成差异的原因。

于 2020-04-22T11:41:23.313 回答