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

wrs*_*der 7 postgresql postgres-fdw postgresql-10

假设我有一个类似的查询

select * from remote_table
   join local_table using(common_key)
Run Code Online (Sandbox Code Playgroud)

其中 remote_table 是一个FOREIGN TABLEwithpostgres_fdw并且local_table是一个普通表。

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

看起来远程表被整体拉取并在本地加入,此时将较小的表发送到远程服务器并远程加入会更有效。

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

Lau*_*lbe 1

您无法通过联接来做到这一点,因为不同服务器上的表之间的联接始终在本地执行。

你可以尝试的是这样的:

SELECT *
FROM (SELECT *
      FROM remote_table
      WHERE common_key IN (SELECT common_key FROM local_table)
     ) a
  JOIN local_table USING (common_key);
Run Code Online (Sandbox Code Playgroud)

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