From a4e9dbd8f9027e582db04fee6158a751eeab8456 Mon Sep 17 00:00:00 2001 From: Japin Li Date: Mon, 9 Jun 2025 10:57:14 +0800 Subject: [PATCH] Fix invalid search_path error Corrects an issue where loading the pgtt extension, when pgtt isn't preloaded and pg_catalog is the last element in search_path, results in an "invalid value for parameter 'search_path'" error due to invalid list syntax. --- pgtt.c | 9 +++++--- test/expected/13_searchpath.out | 40 +++++++++++++++++++++++++++++++++ test/sql/13_searchpath.sql | 17 ++++++++++++++ 3 files changed, 63 insertions(+), 3 deletions(-) diff --git a/pgtt.c b/pgtt.c index 903982f..6534e2a 100755 --- a/pgtt.c +++ b/pgtt.c @@ -1992,12 +1992,15 @@ force_pgtt_namespace(void) * schema */ bool at_end = false; - int len = strlen(old_search_path) - 11; + int len = strlen(old_search_path) - 10; char *p = strstr(old_search_path, "pg_catalog"); if (p != NULL && strcmp(p, "pg_catalog") == 0) { - if (len > 11) - old_search_path[len] = '\0'; + /* remove redundant whitespaces */ + while (len > 0 && isspace(old_search_path[len - 1])) + len--; + old_search_path[len] = '\0'; + appendStringInfo(&search_path, "%s %s", old_search_path, pgtt_schema); at_end = true; } diff --git a/test/expected/13_searchpath.out b/test/expected/13_searchpath.out index b65d728..f2bd917 100644 --- a/test/expected/13_searchpath.out +++ b/test/expected/13_searchpath.out @@ -41,3 +41,43 @@ SHOW search_path ; public, pgtt_schema (1 row) +-- Test only pg_catalog in search_path. +DROP EXTENSION pgtt; +\c - - +SHOW search_path; + search_path +----------------- + "$user", public +(1 row) + +SET search_path TO pg_catalog; +SHOW search_path; + search_path +------------- + pg_catalog +(1 row) + +CREATE EXTENSION pgtt; +SHOW search_path; + search_path +-------------------------- + pgtt_schema, pg_catalog +(1 row) + +-- Test the pg_catalog at end of search_path. +DROP EXTENSION pgtt; +\c - - +SET search_path TO "$user", public, pg_catalog; +SHOW search_path; + search_path +----------------------------- + "$user", public, pg_catalog +(1 row) + +CREATE EXTENSION pgtt; +SHOW search_path; + search_path +------------------------------------------ + "$user", public, pgtt_schema, pg_catalog +(1 row) + diff --git a/test/sql/13_searchpath.sql b/test/sql/13_searchpath.sql index b2e0b10..3b8b8ee 100644 --- a/test/sql/13_searchpath.sql +++ b/test/sql/13_searchpath.sql @@ -17,3 +17,20 @@ SET search_path TO pg_catalog; SHOW search_path ; SET search_path TO public; SHOW search_path ; + +-- Test only pg_catalog in search_path. +DROP EXTENSION pgtt; +\c - - +SHOW search_path; +SET search_path TO pg_catalog; +SHOW search_path; +CREATE EXTENSION pgtt; +SHOW search_path; + +-- Test the pg_catalog at end of search_path. +DROP EXTENSION pgtt; +\c - - +SET search_path TO "$user", public, pg_catalog; +SHOW search_path; +CREATE EXTENSION pgtt; +SHOW search_path;