Re: [HACKERS] path toward faster partition pruning

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Amit Langote <Langote_Amit_f8(at)lab(dot)ntt(dot)co(dot)jp>
Cc: David Rowley <david(dot)rowley(at)2ndquadrant(dot)com>, Amit Langote <amitlangote09(at)gmail(dot)com>, "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: [HACKERS] path toward faster partition pruning
Date: 2018-04-06 20:28:00
Message-ID: 20180406202800.wxmfb3tpioojciuc@alvherre.pgsql
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

So I pushed this 25 minutes ago, and already there's a couple of
buildfarm members complaining:
https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=quokka&dt=2018-04-06%2020%3A09%3A52
https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=termite&dt=2018-04-06%2019%3A55%3A07

Both show exactly the same diff in test partition_prune:

*** /home/pgbuildfarm/buildroot-termite/HEAD/pgsql.build/../pgsql/src/test/regress/expected/partition_prune.out Fri Apr 6 15:55:08 2018
--- /home/pgbuildfarm/buildroot-termite/HEAD/pgsql.build/src/test/regress/results/partition_prune.out Fri Apr 6 16:01:40 2018
***************
*** 1348,1357 ****
----------+----+-----
hp0 | |
hp0 | 1 |
! hp0 | 1 | xxx
hp3 | 10 | yyy
! hp1 | | xxx
! hp2 | 10 | xxx
(6 rows)

-- partial keys won't prune, nor would non-equality conditions
--- 1348,1357 ----
----------+----+-----
hp0 | |
hp0 | 1 |
! hp0 | 10 | xxx
! hp3 | | xxx
hp3 | 10 | yyy
! hp2 | 1 | xxx
(6 rows)

-- partial keys won't prune, nor would non-equality conditions
***************
*** 1460,1466 ****
QUERY PLAN
-------------------------------------------------
Append
! -> Seq Scan on hp0
Filter: ((a = 1) AND (b = 'xxx'::text))
(3 rows)

--- 1460,1466 ----
QUERY PLAN
-------------------------------------------------
Append
! -> Seq Scan on hp2
Filter: ((a = 1) AND (b = 'xxx'::text))
(3 rows)

***************
*** 1468,1474 ****
QUERY PLAN
-----------------------------------------------------
Append
! -> Seq Scan on hp1
Filter: ((a IS NULL) AND (b = 'xxx'::text))
(3 rows)

--- 1468,1474 ----
QUERY PLAN
-----------------------------------------------------
Append
! -> Seq Scan on hp3
Filter: ((a IS NULL) AND (b = 'xxx'::text))
(3 rows)

***************
*** 1476,1482 ****
QUERY PLAN
--------------------------------------------------
Append
! -> Seq Scan on hp2
Filter: ((a = 10) AND (b = 'xxx'::text))
(3 rows)

--- 1476,1482 ----
QUERY PLAN
--------------------------------------------------
Append
! -> Seq Scan on hp0
Filter: ((a = 10) AND (b = 'xxx'::text))
(3 rows)

***************
*** 1494,1504 ****
Append
-> Seq Scan on hp0
Filter: (((a = 10) AND (b = 'yyy'::text)) OR ((a = 10) AND (b = 'xxx'::text)) OR ((a IS NULL) AND (b IS NULL)))
- -> Seq Scan on hp2
- Filter: (((a = 10) AND (b = 'yyy'::text)) OR ((a = 10) AND (b = 'xxx'::text)) OR ((a IS NULL) AND (b IS NULL)))
-> Seq Scan on hp3
Filter: (((a = 10) AND (b = 'yyy'::text)) OR ((a = 10) AND (b = 'xxx'::text)) OR ((a IS NULL) AND (b IS NULL)))
! (7 rows)

-- hash partitiong pruning doesn't occur with <> operator clauses
explain (costs off) select * from hp where a <> 1 and b <> 'xxx';
--- 1494,1502 ----
Append
-> Seq Scan on hp0
Filter: (((a = 10) AND (b = 'yyy'::text)) OR ((a = 10) AND (b = 'xxx'::text)) OR ((a IS NULL) AND (b IS NULL)))
-> Seq Scan on hp3
Filter: (((a = 10) AND (b = 'yyy'::text)) OR ((a = 10) AND (b = 'xxx'::text)) OR ((a IS NULL) AND (b IS NULL)))
! (5 rows)

-- hash partitiong pruning doesn't occur with <> operator clauses
explain (costs off) select * from hp where a <> 1 and b <> 'xxx';

--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Magnus Hagander 2018-04-06 20:28:05 Re: pgsql: Validate page level checksums in base backups
Previous Message Claudio Freire 2018-04-06 20:25:00 Re: Vacuum: allow usage of more than 1GB of work mem