所以,如果我有很多记录我想要插入到一个外表中,我可以这样做(伪代码):
DO
INSERT INTO my_fdw_table VALUES next_row;
LOOP
或:
INSERT INTO my_fdw_table SELECT all_the_rows;
根据我的直觉,第二种方法似乎更有效,因为所有的数据都是一次性发送的,重复的SQL关键字更少。
然而,我不知道第二种方法是否真的会导致同样多的往返。我也不知道,如果有很多行,第二种方法是否会有达到语句长度限制的风险?
我正在使用postgres 9.3
差异不会很大,因为即使是批量INSERT
也会在外部服务器上产生许多单个INSERT
,因此在这两种情况下,往返次数是相同的。
如果有一个可测量的差异,我怀疑这是因为客户端或PL/pgSQL代码处理INSERT
循环需要一些时间。当然,如果您在自己的事务中运行每个INSERT
,或者为INSERT
语句使用动态SQL,那么您的速度会因此变慢。