]> granicus.if.org Git - postgresql/commit
Faster partition pruning
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 6 Apr 2018 19:23:04 +0000 (16:23 -0300)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Fri, 6 Apr 2018 19:44:05 +0000 (16:44 -0300)
commit9fdb675fc5d2de825414e05939727de8b120ae81
tree0e599089ca1e82dac50b61675f1cdf2d53bb0b49
parent11523e860f8fe29f9142fb63c44e01cd0d5e7375
Faster partition pruning

Add a new module backend/partitioning/partprune.c, implementing a more
sophisticated algorithm for partition pruning.  The new module uses each
partition's "boundinfo" for pruning instead of constraint exclusion,
based on an idea proposed by Robert Haas of a "pruning program": a list
of steps generated from the query quals which are run iteratively to
obtain a list of partitions that must be scanned in order to satisfy
those quals.

At present, this targets planner-time partition pruning, but there exist
further patches to apply partition pruning at execution time as well.

This commit also moves some definitions from include/catalog/partition.h
to a new file include/partitioning/partbounds.h, in an attempt to
rationalize partitioning related code.

Authors: Amit Langote, David Rowley, Dilip Kumar
Reviewers: Robert Haas, Kyotaro Horiguchi, Ashutosh Bapat, Jesper Pedersen.
Discussion: https://postgr.es/m/098b9c71-1915-1a2a-8d52-1a7a50ce79e8@lab.ntt.co.jp
27 files changed:
src/backend/Makefile
src/backend/catalog/partition.c
src/backend/nodes/copyfuncs.c
src/backend/nodes/equalfuncs.c
src/backend/nodes/nodeFuncs.c
src/backend/nodes/outfuncs.c
src/backend/nodes/readfuncs.c
src/backend/optimizer/path/allpaths.c
src/backend/optimizer/path/indxpath.c
src/backend/optimizer/plan/planner.c
src/backend/optimizer/prep/prepunion.c
src/backend/optimizer/util/plancat.c
src/backend/optimizer/util/relnode.c
src/backend/partitioning/Makefile [new file with mode: 0644]
src/backend/partitioning/partprune.c [new file with mode: 0644]
src/include/catalog/catversion.h
src/include/catalog/partition.h
src/include/catalog/pg_opfamily.h
src/include/nodes/nodes.h
src/include/nodes/primnodes.h
src/include/nodes/relation.h
src/include/optimizer/planner.h
src/include/partitioning/partbounds.h [new file with mode: 0644]
src/include/partitioning/partprune.h [new file with mode: 0644]
src/test/regress/expected/inherit.out
src/test/regress/expected/partition_prune.out
src/test/regress/sql/partition_prune.sql