Amit Langote reported that partition prune was unable to work with arrays, enums, etc, which led him to research the appropriate way to match query clauses to partition keys: instead of searching for an exact match of the expression's type, it is better to rely on the fact that the expression qual has already been resolved to a specific operator, and that the partition key is linked to a specific operator family. With that info, it's possible to figure out the strategy and comparison function to use for the pruning clause in a manner that works reliably for pseudo-types also.
Include new test cases that demonstrate pruning where pseudotypes are involved.
Author: Amit Langote, Álvaro Herrera Discussion: https://firstname.lastname@example.org
e5dcbb88a1 Rework code to determine partition pruning procedure
src/backend/partitioning/partprune.c | 110 ++++++++++----------
src/test/regress/expected/partition_prune.out | 138 ++++++++++++++++++++++++++
src/test/regress/sql/partition_prune.sql | 53 ++++++++++
3 files changed, 251 insertions(+), 50 deletions(-)