2

所以,如果我有许多记录要插入到外部表中,我可以这样做(伪代码):

DO
    INSERT INTO my_fdw_table VALUES next_row;
LOOP

或这个:

INSERT INTO my_fdw_table SELECT all_the_rows;

根据我的直觉,第二种似乎更有效,因为所有数据都是一次性发送的,重复的 SQL 关键字更少。

但是,我不知道第二个是否真的会导致同样多的往返行程。我也不知道如果有很多行,第二个是否会冒着达到某种语句长度限制的风险?

我正在使用 postgres 9.3

4

1 回答 1

0

差别不会很大,因为即使是批量INSERT也会导致INSERT外服务器上的single很多,所以两种情况下的往返次数是一样的。

如果根本存在可测量的差异,我怀疑这是因为处理INSERT循环的客户端或 PL/pgSQL 代码需要一些时间。当然,如果您INSERT在自己的事务中运行每个事务或对INSERT语句使用动态 SQL,那么您会因此而变慢。

于 2016-10-10T08:44:36.797 回答