2

情况:

  • 我在 postgres 数据库 (db1) 中表 (foreign_table)
  • 我使用 postgres_fdw 在不同的 postgres 数据库(db2)中为 foreign_table 创建了一个外国日期包装器
  • 然后我从 db2 执行“select count(*) from foreign_table”
  • 此查询以 100 行为一组(由 fetch_size 设置)将 foreign_table 的全部内容返回到 db1。

问题:

  • 这会导致查询非常慢,因为 foreign_table 有大约 1 亿行。

我的问题:

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

4

2 回答 2

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;
于 2017-05-10T14:54:27.463 回答
0

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

外部表的聚合下推将出现在 postgres 10 中。

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

于 2017-05-10T14:43:52.970 回答