从 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 与其他聚合函数一样被对待?