Postgres外部数据包装器聚合功能下推

时间:2017-05-10 14:32:33

标签: postgresql aggregate-functions foreign-data-wrapper

情况:

  • 我在postgres数据库(db1)中列出一个表(foreign_table)
  • 我使用postgres_fdw在不同的postgres数据库(db2)中为foreign_table创建一个外来日期包装器
  • 然后我从db2
  • 执行“从foreign_table中选择计数(*)”
  • 此查询以100行(由fetch_size设置)的批次将foreign_table的全部内容返回给db1。

问题:

  • 这会导致查询速度极慢,因为foreign_table有大约1亿行。

我的问题:

是否可以“下推”这个聚合函数,以便在远程postgres数据库上执行count(*)?

2 个答案:

答案 0 :(得分:1)

如果您不想等待Postgres 10,请使用此解决方法:

在外部数据库中创建一个视图:

-- in db1:
create view count_my_table as (
    select count(*) 
    from foreign_table);

在本地数据库中为视图创建外表:

-- in db2:
create foreign table count_my_table (
    count bigint
)
server foreign_server
options (table_name 'count_my_table');

select count 
from count_my_table;

答案 1 :(得分:0)

我将继续回答我自己的问题。

外国赌桌的总体下推将在postgres 10中出现。

有关详细信息,请参阅https://www.enterprisedb.com/blog/postgresql-aggregate-push-down-postgresfdw