需要在PostgreSQL的外部表上进行并行追加

时间:2018-09-25 15:27:56

标签: postgresql postgres-fdw postgresql-11

我们基于postgres_fdw开发了一个fdw,该fdw在大型存储库(大数据)上执行搜索,以保持数据压缩。我们正在尝试使用postgres分区表的概念,以便我们可以同时并行搜索多个分区。对于外部数据包装器,我们需要“并行追加”。

有谁知道Postgres 11是否会解决这个问题?

如果我的查询导致在本地分区进行搜索,则postgres使用并行性,但如果导致外部扫描,则不会。

当地游击队:

explain select * from precio where fecha >= '2017-01-20' and fecha <= '2017-01-21' and plusalesprice < 1

Gather (cost=1000.00..969527.35 rows=81568 width=60)
 Workers Planned: 2
 -> Parallel Append  (cost=0.00..960370.55 rows=33986 width=60)
    -> Parallel Seq Scan on precio_20170121  (cost=0.00..589086.00 rows=19293 width=60)
       Filter: ((fecha >= '2017-01-20'::date) AND (fecha <= '2017-01-21'::date) AND (plusalesprice < '1'::numeric))
    -> Parallel Seq Scan on precio_20170120 (cost=0.00..371114.62 rows=14693 width=60)
       Filter: ((fecha >= '2017-01-20'::date) AND (fecha <= '2017-01-21'::date) AND (plusalesprice < '1'::numeric))

国外分区:

explain select * from precio where fecha >= '2017-01-01' and fecha <= '2017-01-02' and plusalesprice < 1

Append (cost=200.00..2650400.00 rows=20000000 width=60)
 -> Foreign Scan on precio_xdr20170101  (cost=200.00..1275200.00 rows=10000000 width=60)
    Filter: ((fecha >= '2017-01-01'::date) AND (fecha <= '2017-01-02'::date) AND (plusalesprice < '1'::numeric))
 -> Foreign Scan on precio_xdr20170102  (cost=200.00..1275200.00 rows=10000000 width=60)
    Filter: ((fecha >= '2017-01-01'::date) AND (fecha <= '2017-01-02'::date) AND (plusalesprice < '1'::numeric))

Parallel append on foreign tables in PostgreSQL 11

1 个答案:

答案 0 :(得分:0)

要能够使用Parallel Append,所有孩子都必须安全地在并行工作者中运行。 postgres_fdw还不能保证安全(即使从PostgreSQL 11开始也是如此),因此不能并行扫描由postgres_fdw管理的任何子表。