Index: src/backend/access/common/reloptions.c
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/access/common/reloptions.c,v
retrieving revision 1.28.2.2
diff -c -p -r1.28.2.2 reloptions.c
*** src/backend/access/common/reloptions.c	11 Mar 2010 21:47:25 -0000	1.28.2.2
--- src/backend/access/common/reloptions.c	18 May 2010 19:54:57 -0000
***************
*** 44,49 ****
--- 44,52 ----
   *
   * Note that we don't handle "oids" in relOpts because it is handled by
   * interpretOidsOption().
+  *
+  * Note that any option that exists for RELOPT_KIND_HEAP must also exist for
+  * RELOPT_KIND_TOAST.
   */
  
  static relopt_bool boolRelOpts[] =
*************** static relopt_int intRelOpts[] =
*** 81,86 ****
--- 84,97 ----
  	{
  		{
  			"fillfactor",
+ 			"Toast default fillfactor, cannot be changed",
+ 			RELOPT_KIND_TOAST, true
+ 		},
+ 		100, 100, 100
+ 	},
+ 	{
+ 		{
+ 			"fillfactor",
  			"Packs btree index pages only to this percentage",
  			RELOPT_KIND_BTREE
  		},
*************** parse_one_reloption(relopt_value *option
*** 886,891 ****
--- 897,908 ----
  				 errmsg("parameter \"%s\" specified more than once",
  						option->gen->name)));
  
+ 	if (option->gen->default_only && validate)
+ 		ereport(ERROR,
+ 				(errcode(ERRCODE_CANT_CHANGE_RUNTIME_PARAM), /* ERRCODE_INVALID_PARAMETER_VALUE */
+ 				 errmsg("parameter \"%s\" cannot be changed",
+ 						option->gen->name)));
+ 
  	value_len = text_len - option->gen->namelen - 1;
  	value = (char *) palloc(value_len + 1);
  	memcpy(value, text_str + option->gen->namelen + 1, value_len);
Index: src/include/access/reloptions.h
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/include/access/reloptions.h,v
retrieving revision 1.16
diff -c -p -r1.16 reloptions.h
*** src/include/access/reloptions.h	11 Jun 2009 14:49:09 -0000	1.16
--- src/include/access/reloptions.h	18 May 2010 20:43:40 -0000
*************** typedef struct relopt_gen
*** 55,60 ****
--- 55,61 ----
  								 * marker) */
  	const char *desc;
  	bits32		kinds;
+ 	bool		default_only;	/* not settable? */
  	int			namelen;
  	relopt_type type;
  } relopt_gen;
