diff --git a/src/backend/catalog/pg_proc.c b/src/backend/catalog/pg_proc.c
index 4ec4c44bd402f0a30e6c73c3e1e58fdc46667d07..897ae682a3482c6c73d4a24f382f64cac2e1935a 100644
--- a/src/backend/catalog/pg_proc.c
+++ b/src/backend/catalog/pg_proc.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/catalog/pg_proc.c,v 1.98 2003/07/01 00:04:37 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/catalog/pg_proc.c,v 1.99 2003/07/01 01:28:32 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -639,24 +639,32 @@ fmgr_sql_validator(PG_FUNCTION_ARGS)
 		}
 	}
 
+	tmp = SysCacheGetAttr(PROCOID, tuple, Anum_pg_proc_prosrc, &isnull);
+	if (isnull)
+		elog(ERROR, "null prosrc");
+
+	prosrc = DatumGetCString(DirectFunctionCall1(textout, tmp));
+
 	/*
-	 * We can't precheck the function definition if there are any polymorphic
-	 * input types, because actual datatypes of expression results will be
-	 * unresolvable.  The check will be done at runtime instead.
+	 * We can't do full prechecking of the function definition if there are
+	 * any polymorphic input types, because actual datatypes of expression
+	 * results will be unresolvable.  The check will be done at runtime
+	 * instead.
+	 *
+	 * We can run the text through the raw parser though; this will at
+	 * least catch silly syntactic errors.
 	 */
 	if (!haspolyarg)
 	{
-		tmp = SysCacheGetAttr(PROCOID, tuple, Anum_pg_proc_prosrc, &isnull);
-		if (isnull)
-			elog(ERROR, "null prosrc");
-
-		prosrc = DatumGetCString(DirectFunctionCall1(textout, tmp));
-
 		querytree_list = pg_parse_and_rewrite(prosrc,
 											  proc->proargtypes,
 											  proc->pronargs);
 		check_sql_fn_retval(proc->prorettype, functyptype, querytree_list);
 	}
+	else
+	{
+		querytree_list = pg_parse_query(prosrc);
+	}
 
 	ReleaseSysCache(tuple);