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
  --
