小编zwo*_*wol的帖子

使用 postgresql_fdw 手动执行特定的远程查询

在 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)

postgresql foreign-data postgresql-fdw

6
推荐指数
1
解决办法
1450
查看次数

标签 统计

foreign-data ×1

postgresql ×1

postgresql-fdw ×1