Re: why partition pruning doesn't work?
David Rowley <david.rowley@2ndquadrant.com>
From: David Rowley <david.rowley@2ndquadrant.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>,
Dmitry Dolgov <9erthalion6@gmail.com>, Jeff Janes <jeff.janes@gmail.com>,
Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>, Pavel Stehule <pavel.stehule@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2018-06-12T08:06:42Z
Lists: pgsql-hackers
Attachments
- fix_bogus_fmgrinfo_initialisation.patch (application/octet-stream) patch
On 12 June 2018 at 10:24, Tom Lane <tgl@sss.pgh.pa.us> wrote: > After looking closer, that code isn't just inefficient, it's flat > out broken. The reason is that ExecSetupPartitionPruneState thinks > it can store some pointers into the target relation's relcache entry > in the PartitionPruneContext, and then continue to use those pointers > after closing the relcache entry. Nope, you can't do that. I think the best fix is to just have a separate FmgrInfo for each step and partkey comparison. Some FmgrInfos will end up identical, but that's probably a small price to pay. Perhaps they should be separate anyway so that the fn_extra is not shared between different quals comparing to the same partition key? I went with an array of FmgrInfos rather than an array of pointers to FmgrInfos for cache efficiency. This does require that InvalidOid is 0, since I've palloc0'd that memory, and I'm checking if the cache is yet to be populated with: if (!OidIsValid(context->stepcmpfuncs[stateidx].fn_oid)) Patch attached. -- David Rowley http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
Commits
-
Fix up run-time partition pruning's use of relcache's partition data.
- e23bae82cf3d 11.0 landed
-
Fix access to just-closed relcache entry.
- bdc643e5e46f 11.0 landed
- b10edaf4bb44 10.5 landed
-
Improve ExecFindInitialMatchingSubPlans's subplan renumbering logic.
- 69025c5a07a1 11.0 landed
-
Improve commentary about run-time partition pruning data structures.
- 4e2323640333 11.0 landed
-
Fix run-time partition pruning code to handle NULL values properly.
- be3d90026a3c 11.0 landed
-
Assorted cosmetic cleanup of run-time-partition-pruning code.
- 321f648a312b 11.0 landed
-
Relocate partition pruning structs to a saner place.
- 939449de0e57 11.0 landed
-
Improve run-time partition pruning to handle any stable expression.
- 73b7f48f78d2 11.0 landed
-
Support partition pruning at execution time
- 499be013de65 11.0 cited