postgres_fdw fails to see that array type belongs to extension

From: David Geier <geidav(dot)pg(at)gmail(dot)com>
To: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: postgres_fdw fails to see that array type belongs to extension
Date: 2023-12-27 16:43:37
Message-ID: 4a847c55-489f-4e8d-a664-fc6b1cbe306f@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi hackers,

We use postgres_fdw to connect two databases. Both DBs have an extension
installed which provides a custom string data type. Our extension is
known to the FDW as we created the foreign server with our extension
listed in the "extensions" option.

The filter clause of the query SELECT * FROM test WHERE col = 'foo' OR
col = 'bar' is pushed down to the remote, while the filter clause of the
semantically equivalent query SELECT * FROM test WHERE col IN ('foo',
'bar') is not.

I traced this down to getExtensionOfObject() called from
lookup_shippable(). getExtensionOfObject() doesn't recurse but only
checks first level dependencies and only checks for extension
dependencies. However, the IN operator takes an array of our custom data
type as argument (type is typically prefixed with _ in pg_type). This
array type is only dependent on our extension via the custom data type
in two steps which postgres_fdw doesn't see. Therefore, postgres_fdw
doesn't allow for push-down of the IN.

Thoughts?

--
David Geier
(ServiceNow)

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message jian he 2023-12-27 16:53:13 add function argument names to regex* functions.
Previous Message Melanie Plageman 2023-12-27 16:26:52 Re: Emit fewer vacuum records by reaping removable tuples during pruning