On Fri, Oct 11, 2019 at 10:48:37AM -0400, Tom Lane wrote: > Could you provide a self-contained test case please?
SET enable_partitionwise_aggregate = 'on'; SET enable_partitionwise_join = 'on'; SET max_parallel_workers_per_gather=0; -- maybe not important but explain(settings) suggests I should include them for completeness: SET effective_io_concurrency = '0'; SET work_mem = '512MB'; SET jit = 'off'; CREATE TABLE s(site_id int, site_location text, site_office text); INSERT INTO s SELECT generate_series(1,99),'',''; CREATE TABLE t(start_time timestamp, site_id text, i int)PARTITION BY RANGE(start_time); CREATE TABLE t1 PARTITION OF t FOR VALUES FROM ('2019-10-01')TO('2019-10-02'); INSERT INTO t1 SELECT a,b FROM generate_series( '2019-10-01'::timestamp, '2019-10-01 23:45'::timestamp, '15 minutes')a, generate_series(1,99)b, generate_series(1,99)c; CREATE TABLE t2 PARTITION OF t FOR VALUES FROM ('2019-10-02')TO('2019-10-03'); INSERT INTO t2 SELECT a,b FROM generate_series( '2019-10-02'::timestamp, '2019-10-02 23:45'::timestamp, '15 minutes')a, generate_series(1,99)b, generate_series(1,99)c; ANALYZE s,t; explain SELECT s.* FROM (SELECT start_time, site_id::int FROM t t1 FULL JOIN t t2 USING(start_time,site_id) WHERE (start_time>='2019-10-01' AND start_time<'2019-10-01 01:00') GROUP BY 1,2) AS data JOIN s ON (s.site_location='' OR s.site_office::int=data.site_id) Justin