我需要定期将数据从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(。
第一个语句将有效地运行许多小的插入,尽管有一个准备好的语句,所以每次都没有计划开销。因此,两台服务器之间会有更多的往返行程,这可能是造成差异的原因。