1

从 PostgreSQL 10.x 开始,外部表支持聚合下推。

我注意到 sum 和 count 操作被推送到远程服务器,但 min 和 max 的推送方式不同。

 select min(col) from foreign_table 

显示带有 ORDER BY 的外部扫描,后跟本地应用的 LIMIT。

在我的例子中,远程服务器实际上是 Redshift 而不是另一个 PostgreSQL 实例,所以这将比在查询上发出正确的方式要慢,min就像 sum 或 count 一样,奇怪的是,如果你执行类似的查询

 select count(col), min(col) from foreign_table 

将被推送到查询中min

为什么 postgres_fdw 对 min/max 的处理方式不同,是否有优化器设置可以让 min/max 与其他聚合函数一样被对待?

4

1 回答 1

0

这实际上是最好和最快的方法。您是否测试过您的断言“这将比在查询中发出权限要慢min”?

PostgreSQL 按需从执行器节点获取元组,所以会发生的是第一行是从外部扫描中获取的(通过索引),然后LIMIT将完成并且不会获取更多行。min这基本上与远程执行时会发生的事情相同。

于 2018-08-23T07:27:22.110 回答