Re: Filtering on an enum field in a foreign table - Mailing list pgsql-performance

From Vladimir Ryabtsev
Subject Re: Filtering on an enum field in a foreign table
Date
Msg-id CAMqTPqn=NDT-AwH40YY7P79Kirw=t0jCWtVnhaAmyPwPeOs3OQ@mail.gmail.com
Whole thread Raw
In response to Re: Filtering on an enum field in a foreign table  (Vladimir Ryabtsev <greatvovan@gmail.com>)
List pgsql-performance
Wait folks,

I realized that if I create a basic view with enum fields converted to text, it does the trick! I query the view with text predicate and the view implementation (I think) converts it into enums when querying the underlying table.

But I still think it should work without such workarounds...

вт, 16 июл. 2019 г. в 18:06, Vladimir Ryabtsev <greatvovan@gmail.com>:
Sorry, the version() is

"PostgreSQL 10.3 (Ubuntu 10.3-1.pgdg14.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4, 64-bit"

I gave use_remote_estimate a try but unfortunately it is the same.

Additionally I see on your page (in "Remote Execution Options"):

"By default, only WHERE clauses using built-in operators and functions will be considered for execution on the remote server. Clauses involving non-built-in functions are checked locally after rows are fetched."

I think enum types somehow fall into the same category and they are filtered only locally, which is seen in the plan (Filter clause).
If I use only columns of built-in type in the predicate everything works as expected (with filtering on the remote server).

I need a workaround to make this query execute remotely. One option may be using a materialized view with these enum values converted to text but then I will need to refresh this view periodically on the remote server.
And actually it looks like a performance bug in the DBMS...


вт, 16 июл. 2019 г. в 17:45, Nikolay Samokhvalov <samokhvalov@gmail.com>:
Hi,

On Tue, Jul 16, 2019 at 4:00 PM Vladimir Ryabtsev <greatvovan@gmail.com> wrote:
I am querying a remote server through a foreign table definition.

CREATE TABLE example (id integer, product product_enum, status status_enum)
...
When I am querying the foreign table on enum predicate like

select * from example where product = 'a' and status = 'active'

I see that filtering happens on my server which can be seen in the plan and can be felt from the query performance (indices are not used of course).

What Postgres version do you use?

Any changes in plans if you collect stats on the FDW table ("analyze example;")?

Have you considered changing the option "use_remote_estimate" (see https://www.postgresql.org/docs/current/postgres-fdw.html#id-1.11.7.42.10)?
 

pgsql-performance by date:

Previous
From: Vladimir Ryabtsev
Date:
Subject: Re: Filtering on an enum field in a foreign table
Next
From: mayank rupareliya
Date:
Subject: Searching in varchar column having 100M records