Postgres, RDW, WHERE condition not pushed to remote (JSONB attribute, using postgres_rdw) I have a remote postgres table using RDW. It contains a JSONB column and I use values in that JSONB for the WHERE condition.

The remote table has a GIN index on the JSONB column and an index on the hostname-attribute that I use for filtering. 

EXPLAIN ANALYZE VERBOSE
SELECT 
* 
FROM forein_table
WHERE details-&gt;&gt;'hostname' = 'host-xyz'


shows that the "Remote SQL" does not contain the WHERE-clause and filtering is done local. 
On the other hand

EXPLAIN ANALYZE VERBOSE
SELECT 
* 
FROM forein_table
WHERE details@&gt; '{"hostname": "host-xyz"}'


sends down the 'WHERE' clause which is obviously much faster.

The documentation says:


  WHERE clauses are not sent to the remote server unless they use only built-in data types, operators, and functions. Operators and functions in the clauses must be IMMUTABLE as well.


Is there a difference between -&gt;&gt; and @&gt;?

Is there a way to use WHERE details-&gt;&gt;'hostname' = 'host-xyz' on a remote table and have it push down the WHERE clause?

(I found a way by creating a VIEW which extracts the hostname attribute as a column, and then creating the remote table on this view...but obviously this is not a very flexible/elegant approach)
I believe the reason for this is that in details-&gt;&gt;'hostname', 'hostname' is of a text type, and PostgreSQL cannot prove to itself either that the same default collation is in use on both sides of the FDW, or that the ->> operator will always return the same answer regardless of collation of its right argument.  So it won't push it over.

There has been some talk of adding a way to mark functions and operators as not being sensitive to collation.  But that won't done until at v12 at the earliest.