User-defined Operator Pushdown and Collations

From: Paul Ramsey <pramsey(at)cleverelephant(dot)ca>
To: Pgsql Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: User-defined Operator Pushdown and Collations
Date: 2016-11-25 19:30:23
Message-ID: CACowWR1ARWyRepRxGfijMcsw+H84Dj8x2o9N3kvz=z1p+6b45Q@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

I've been trying to figure out an issue with operators not being pushed
down for user defined types, in this case "hstore". TL;DR:

hstore=# explain (verbose) select * from hs_fdw where h -> 'a' = '1';
QUERY PLAN
----------------------------------------------------------------------
Foreign Scan on public.hs_fdw (cost=100.00..157.78 rows=7 width=36)
Output: id, h
Filter: ((hs_fdw.h -> 'a'::text) = '1'::text)
Remote SQL: SELECT id, h FROM public.hs
(4 rows)

In terms of "shippability" the "->" operator passes fine. It ends up not
being shipped because its collation bubbles up as FDW_COLLATE_NONE, and
gets kicked back as not deparseable around here:

https://github.com/postgres/postgres/blob/4e026b32d4024b03856b4981b26c747b7fef7afb/contrib/postgres_fdw/deparse.c#L499

I'm still working at wrapping my head around why this is good or not, but
if there's an obvious explanation and/or workaround, I'd love to know.

Thanks!

P

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tomas Vondra 2016-11-25 19:54:55 Re: confusing checkpoint_flush_after / bgwriter_flush_after
Previous Message Bruce Momjian 2016-11-25 17:53:11 Re: UNDO and in-place update