情况:
- 我在 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。