假设我有一个类似的查询
select * from remote_table
join local_table using(common_key)
其中remote_table是带有FOREIGN TABLE
的{{1}},而postgres_fdw
是常规表。
local_table
很小(100行),local_table
很大(几百万行)。
当将较小的表运送到远程服务器并进行远程连接会更有效时,似乎将远程表整体拉出并在本地连接。
有没有办法让postgres_fdw做到这一点?
答案 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)
您是否尝试过将本地数据部署到外部服务器上的临时表中,然后将其加入外部表中?不确定您的过程,或者这是否对您有效。