It is shipping collation-sensitive aggregates between servers which have different collations.
commit 7012b132d07c2b4ea15b0b3cb1ea9f3278801d98 Author: Robert Haas <rh...@postgresql.org> Date: Fri Oct 21 09:54:29 2016 -0400 postgres_fdw: Push down aggregates to remote servers. I've attached a reproducing case. Before this commit, the two final queries give the same answer, and after they give different answers. Maybe this isn't considered a bug? Is it just one of the "surprising semantic anomalies may arise when types or collations do not match"? It should be able to know what collation the local definition of the foreign table has; couldn't it pass that collation over the foreign side? I don't really care, I was just using min as a way to get an arbitrary value in the cases where there are more than one, but I found the change surprising. Cheers, Jeff
drop database foobar_C; drop database foobar_US; create database foobar_C encoding 'utf-8' lc_collate "C" template template0; create database foobar_US encoding 'utf-8' lc_collate "en_US.utf8" template template0; \c foobar_us create table remote1 (x text); \copy remote1 from stdin a P \. \c foobar_c CREATE EXTENSION IF NOT EXISTS postgres_fdw WITH SCHEMA public; CREATE SERVER remote_server FOREIGN DATA WRAPPER postgres_fdw options (dbname 'foobar_us') ; CREATE USER MAPPING FOR postgres SERVER remote_server OPTIONS ( "user" 'postgres' ); CREATE FOREIGN TABLE remote1 ( x text ) SERVER remote_server OPTIONS ( schema_name 'public', table_name 'remote1', use_remote_estimate 'true' ); create table local1 (x text); \copy local1 from stdin a P \. select min(x) from local1; select min(x) from remote1;
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers