This is an automated email from the ASF dual-hosted git repository.

maxyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry.git

commit f25510b817408248556ad3e44f13ebed74319b31
Author: Tom Lane <[email protected]>
AuthorDate: Sun Jul 17 17:27:50 2022 -0400

    postgres_fdw: set search_path to 'pg_catalog' while deparsing constants.
    
    The motivation for this is to ensure successful transmission of the
    values of constants of regconfig and other reg* types.  The remote
    will be reading them with search_path = 'pg_catalog', so schema
    qualification is necessary when referencing objects in other schemas.
    
    Per bug #17483 from Emmanuel Quincerot.  Back-patch to all supported
    versions.  (There's some other stuff to do here, but it's less
    back-patchable.)
    
    Discussion: https://postgr.es/m/[email protected]
---
 contrib/postgres_fdw/expected/postgres_fdw.out | 20 ++++++++++++++++++++
 contrib/postgres_fdw/postgres_fdw.c            |  8 ++++++++
 contrib/postgres_fdw/sql/postgres_fdw.sql      |  9 +++++++++
 3 files changed, 37 insertions(+)

diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out 
b/contrib/postgres_fdw/expected/postgres_fdw.out
index 5257c366ab..2671d72de0 100644
--- a/contrib/postgres_fdw/expected/postgres_fdw.out
+++ b/contrib/postgres_fdw/expected/postgres_fdw.out
@@ -1157,6 +1157,26 @@ SELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by 
t1.c2 limit 1;
   1 |  1 | 00001 | Fri Jan 02 00:00:00 1970 PST | Fri Jan 02 00:00:00 1970 | 1 
 | 1          | foo
 (1 row)
 
+-- check schema-qualification of regconfig constant
+CREATE TEXT SEARCH CONFIGURATION public.custom_search
+  (COPY = pg_catalog.english);
+EXPLAIN (VERBOSE, COSTS OFF)
+SELECT c1, to_tsvector('custom_search'::regconfig, c3) FROM ft1
+WHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0;
+                                                                  QUERY PLAN   
                                                               
+----------------------------------------------------------------------------------------------------------------------------------------------
+ Foreign Scan on public.ft1
+   Output: c1, to_tsvector('custom_search'::regconfig, c3)
+   Remote SQL: SELECT "C 1", c3 FROM "S 1"."T 1" WHERE (("C 1" = 642)) AND 
((length(to_tsvector('public.custom_search'::regconfig, c3)) > 0))
+(3 rows)
+
+SELECT c1, to_tsvector('custom_search'::regconfig, c3) FROM ft1
+WHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0;
+ c1  | to_tsvector 
+-----+-------------
+ 642 | '00642':1
+(1 row)
+
 -- ===================================================================
 -- JOIN queries
 -- ===================================================================
diff --git a/contrib/postgres_fdw/postgres_fdw.c 
b/contrib/postgres_fdw/postgres_fdw.c
index b68868d547..290f0f50c6 100644
--- a/contrib/postgres_fdw/postgres_fdw.c
+++ b/contrib/postgres_fdw/postgres_fdw.c
@@ -3915,6 +3915,14 @@ set_transmission_modes(void)
                                                                 PGC_USERSET, 
PGC_S_SESSION,
                                                                 
GUC_ACTION_SAVE, true, 0, false);
 
+       /*
+        * In addition force restrictive search_path, in case there are any
+        * regproc or similar constants to be printed.
+        */
+       (void) set_config_option("search_path", "pg_catalog",
+                                                        PGC_USERSET, 
PGC_S_SESSION,
+                                                        GUC_ACTION_SAVE, true, 
0, false);
+
        return nestlevel;
 }
 
diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql 
b/contrib/postgres_fdw/sql/postgres_fdw.sql
index cc78e44c1d..724c1802b2 100644
--- a/contrib/postgres_fdw/sql/postgres_fdw.sql
+++ b/contrib/postgres_fdw/sql/postgres_fdw.sql
@@ -408,6 +408,15 @@ EXPLAIN (VERBOSE, COSTS OFF)
   SELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1;
 SELECT * FROM ft1 t1 WHERE t1.c1 === t1.c2 order by t1.c2 limit 1;
 
+-- check schema-qualification of regconfig constant
+CREATE TEXT SEARCH CONFIGURATION public.custom_search
+  (COPY = pg_catalog.english);
+EXPLAIN (VERBOSE, COSTS OFF)
+SELECT c1, to_tsvector('custom_search'::regconfig, c3) FROM ft1
+WHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0;
+SELECT c1, to_tsvector('custom_search'::regconfig, c3) FROM ft1
+WHERE c1 = 642 AND length(to_tsvector('custom_search'::regconfig, c3)) > 0;
+
 -- ===================================================================
 -- JOIN queries
 -- ===================================================================


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to