diff --git a/src/backend/catalog/pg_db_role_setting.c b/src/backend/catalog/pg_db_role_setting.c
index 6e19736..7fda64c
*** a/src/backend/catalog/pg_db_role_setting.c
--- b/src/backend/catalog/pg_db_role_setting.c
*************** ApplySetting(Snapshot snapshot, Oid data
*** 262,268 ****
  			 * right to insert an option into pg_db_role_setting was checked
  			 * when it was inserted.
  			 */
! 			ProcessGUCArray(a, PGC_SUSET, source, GUC_ACTION_SET);
  		}
  	}
  
--- 262,268 ----
  			 * right to insert an option into pg_db_role_setting was checked
  			 * when it was inserted.
  			 */
! 			ProcessGUCArray(a, PGC_SUSET, source, GUC_ACTION_SET,0);
  		}
  	}
  
diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c
index 2a98ca9..5ecc630
*** a/src/backend/catalog/pg_proc.c
--- b/src/backend/catalog/pg_proc.c
*************** ProcedureCreate(const char *procedureNam
*** 679,688 ****
  		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);
  		}
  		else
  			save_nestlevel = 0; /* keep compiler quiet */
--- 679,699 ----
  		if (set_items)			/* Need a new GUC nesting level */
  		{
  			save_nestlevel = NewGUCNestLevel();
+ 			/* reduce elevel to NOTICE if check_function_bodies is disabled */
+ 			if (check_function_bodies) {
  			ProcessGUCArray(set_items,
  							(superuser() ? PGC_SUSET : PGC_USERSET),
  							PGC_S_SESSION,
! 							GUC_ACTION_SAVE,
! 							0);
! 			}
! 			else {
! 			ProcessGUCArray(set_items,
! 							(superuser() ? PGC_SUSET : PGC_USERSET),
! 							PGC_S_SESSION,
! 							GUC_ACTION_SAVE,
! 							NOTICE);
! 			}
  		}
  		else
  			save_nestlevel = 0; /* keep compiler quiet */
diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c
index 42de04c..7d323eb
*** a/src/backend/utils/fmgr/fmgr.c
--- b/src/backend/utils/fmgr/fmgr.c
*************** fmgr_security_definer(PG_FUNCTION_ARGS)
*** 951,957 ****
  		ProcessGUCArray(fcache->proconfig,
  						(superuser() ? PGC_SUSET : PGC_USERSET),
  						PGC_S_SESSION,
! 						GUC_ACTION_SAVE);
  	}
  
  	/* function manager hook */
--- 951,958 ----
  		ProcessGUCArray(fcache->proconfig,
  						(superuser() ? PGC_SUSET : PGC_USERSET),
  						PGC_S_SESSION,
! 						GUC_ACTION_SAVE,
! 						0);
  	}
  
  	/* function manager hook */
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 0b23c38..15e4aab
*** a/src/backend/utils/misc/guc.c
--- b/src/backend/utils/misc/guc.c
*************** ParseLongOption(const char *string, char
*** 7820,7832 ****
  
  /*
   * Handle options fetched from pg_db_role_setting.setconfig,
!  * pg_proc.proconfig, etc.	Caller must specify proper context/source/action.
   *
   * The array parameter must be an array of TEXT (it must not be NULL).
   */
  void
  ProcessGUCArray(ArrayType *array,
! 				GucContext context, GucSource source, GucAction action)
  {
  	int			i;
  
--- 7820,7832 ----
  
  /*
   * Handle options fetched from pg_db_role_setting.setconfig,
!  * pg_proc.proconfig, etc.	Caller must specify proper context/source/action/elevel.
   *
   * The array parameter must be an array of TEXT (it must not be NULL).
   */
  void
  ProcessGUCArray(ArrayType *array,
! 				GucContext context, GucSource source, GucAction action,int elevel)
  {
  	int			i;
  
*************** ProcessGUCArray(ArrayType *array,
*** 7868,7874 ****
  
  		(void) set_config_option(name, value,
  								 context, source,
! 								 action, true, 0);
  
  		free(name);
  		if (value)
--- 7868,7874 ----
  
  		(void) set_config_option(name, value,
  								 context, source,
! 								 action, true, elevel);
  
  		free(name);
  		if (value)
diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h
index d497b1f..fb4b8f5
*** a/src/include/utils/guc.h
--- b/src/include/utils/guc.h
*************** extern void ExecSetVariableStmt(Variable
*** 334,340 ****
  extern char *ExtractSetVariableArgs(VariableSetStmt *stmt);
  
  extern void ProcessGUCArray(ArrayType *array,
! 				GucContext context, GucSource source, GucAction action);
  extern ArrayType *GUCArrayAdd(ArrayType *array, const char *name, const char *value);
  extern ArrayType *GUCArrayDelete(ArrayType *array, const char *name);
  extern ArrayType *GUCArrayReset(ArrayType *array);
--- 334,340 ----
  extern char *ExtractSetVariableArgs(VariableSetStmt *stmt);
  
  extern void ProcessGUCArray(ArrayType *array,
! 				GucContext context, GucSource source, GucAction action, int elevel);
  extern ArrayType *GUCArrayAdd(ArrayType *array, const char *name, const char *value);
  extern ArrayType *GUCArrayDelete(ArrayType *array, const char *name);
  extern ArrayType *GUCArrayReset(ArrayType *array);
