diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c index d76e415..04f136d 100644 *** a/src/backend/catalog/pg_proc.c --- b/src/backend/catalog/pg_proc.c *************** ProcedureCreate(const char *procedureNam *** 621,629 **** --- 621,647 ---- /* Verify function body */ if (OidIsValid(languageValidator)) { + ArrayType *set_items; + int save_nestlevel; + /* Advance command counter so new tuple can be seen by validator */ CommandCounterIncrement(); + + /* Set per-function configuration parameters */ + set_items = (ArrayType *) DatumGetPointer(proconfig); + if (set_items) /* Need a new GUC nesting level */ + { + save_nestlevel = NewGUCNestLevel(); + ProcessGUCArray(set_items, + (superuser() ? PGC_SUSET : PGC_USERSET), + PGC_S_SESSION, + GUC_ACTION_SAVE); + } + OidFunctionCall1(languageValidator, ObjectIdGetDatum(retval)); + + if (set_items) + AtEOXact_GUC(true, save_nestlevel); } return retval; diff --git a/src/test/regress/input/create_function_2.source b/src/test/regress/input/create_function_2.source index b1289e8..9d2c0d7 100644 *** a/src/test/regress/input/create_function_2.source --- b/src/test/regress/input/create_function_2.source *************** CREATE FUNCTION oldstyle_length(int4, te *** 64,69 **** --- 64,80 ---- AS '@libdir@/regress@DLSUFFIX@' LANGUAGE C; + CREATE SCHEMA non_default_search_path; + CREATE TABLE non_default_search_path.table_in_custom_search_path (id integer); + CREATE FUNCTION function_with_search_path() + RETURNS SETOF integer + AS 'SELECT * FROM table_in_custom_search_path' + LANGUAGE SQL + SET search_path = non_default_search_path; + SELECT * FROM function_with_search_path(); + DROP TABLE non_default_search_path.table_in_custom_search_path; + DROP SCHEMA non_default_search_path; + -- -- Function dynamic loading -- diff --git a/src/test/regress/output/create_function_2.source b/src/test/regress/output/create_function_2.source index 0feb975..41ab7d7 100644 *** a/src/test/regress/output/create_function_2.source --- b/src/test/regress/output/create_function_2.source *************** CREATE FUNCTION oldstyle_length(int4, te *** 51,56 **** --- 51,70 ---- RETURNS int4 AS '@libdir@/regress@DLSUFFIX@' LANGUAGE C; + CREATE SCHEMA non_default_search_path; + CREATE TABLE non_default_search_path.table_in_custom_search_path (id integer); + CREATE FUNCTION function_with_search_path() + RETURNS SETOF integer + AS 'SELECT * FROM table_in_custom_search_path' + LANGUAGE SQL + SET search_path = non_default_search_path; + SELECT * FROM function_with_search_path(); + function_with_search_path + --------------------------- + (0 rows) + + DROP TABLE non_default_search_path.table_in_custom_search_path; + DROP SCHEMA non_default_search_path; -- -- Function dynamic loading --