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



情况:

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

问题:

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

我的问题:

是否可以"向下推"此聚合函数,以便在远程 postgres 数据库上执行 count(*(?

如果您不想等待 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;

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

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

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

相关内容

  • 没有找到相关文章

最新更新