2017-05-10 69 views
2

現狀:Postgres的外來數據包裝聚合函數下推

  • 我表一表(foreign_table)在Postgres數據庫(DB1)
  • 我創建了一個國外最新的包裝在不同的Postgres數據庫到foreign_table(DB2 )使用postgres_fdw
  • 然後,我從db2執行「來自foreign_table的select count(*)」
  • 此查詢以100行(由fetch_size設置)的批次將foreign_table的全部內容返回給db1。

問題:

  • 這導致查詢是作爲foreign_table擁有約100萬行慢得令人難以置信。

我的問題:

是否有可能「倒推」,使COUNT(*)在遠程Postgres數據庫上執行此聚集函數?

回答

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;