7

假设我有一个类似的查询

select * from remote_table
   join local_table using(common_key)

其中 remote_table 是一个FOREIGN TABLEwithpostgres_fdw并且local_table是一个常规表。

local_table小(100 行)和remote_table大(数百万行)。

看起来远程表被完全拉出并在本地加入,而将较小的表发送到远程服务器并远程加入会更有效。

有没有办法让 postgres_fdw 做到这一点?

4

2 回答 2

0

您不能通过连接来做到这一点,因为不同服务器上的表之间的连接总是在本地执行。

你可以尝试的是这样的:

SELECT *
FROM (SELECT *
      FROM remote_table
      WHERE common_key IN (SELECT common_key FROM local_table)
     ) a
  JOIN local_table USING (common_key);

我没有测试它,所以我不确定它是否会工作,但想法是使用可以下推的外部表扫描条件并尽可能减少获取的数据量。

于 2018-08-23T07:22:30.063 回答
0

您是否尝试过将本地数据部署到外部服务器上的临时表中,然后将其加入外部表中?不确定您的流程,或者这对您是否有效。

于 2020-04-22T13:00:58.397 回答