postgres_fdw:可以将数据推送到外部服务器进行联接吗?

时间:2018-08-22 15:27:52

标签: postgresql postgresql-10 postgres-fdw

假设我有一个类似的查询

select * from remote_table
   join local_table using(common_key)

其中remote_table是带有FOREIGN TABLE的{​​{1}},而postgres_fdw是常规表。

local_table很小(100行),local_table很大(几百万行)。

当将较小的表运送到远程服务器并进行远程连接会更有效时,似乎将远程表整体拉出并在本地连接。

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

2 个答案:

答案 0 :(得分:0)

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

您可以尝试的操作如下:

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

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

答案 1 :(得分:0)

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