在 9.4b2 中,postgresql_fdw
不知道如何在远程表上“下推”聚合查询,例如
> explain verbose select max(col1) from remote_tables.table1;
QUERY PLAN
---------------------------------------------------------------------------------------------
Aggregate (cost=605587.30..605587.31 rows=1 width=4)
Output: max(col1)
-> Foreign Scan on remote_tables.table1 (cost=100.00..565653.20 rows=15973640 width=4)
Output: col1, col2, col3
Remote SQL: SELECT col1 FROM public.table1
Run Code Online (Sandbox Code Playgroud)
显然,发送SELECT max(col1) FROM public.table1
到远程服务器并只将一行拉回来会更有效率。
有没有办法手动执行此优化?我会对像(假设地说)这样低级的东西感到满意
EXECUTE 'SELECT max(col1) FROM public.table1' ON remote RETURNING (col1 INTEGER);
Run Code Online (Sandbox Code Playgroud)
虽然当然更喜欢更高级别的构造。
我知道我可以用 做这样的事情dblink
,但这将涉及重写大量已经使用外部表的代码,所以我不想这样做。
编辑:这是 Erwin Brandstetter 建议的查询计划:
=> explain verbose select col1 from remote_tables.table1
-> order by col1 desc nulls last limit …
Run Code Online (Sandbox Code Playgroud)