diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index 61558be8439..15dbc50a13d 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.248 2003/07/21 01:59:08 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.249 2003/07/29 17:21:20 tgl Exp $
  *
  *
  * INTERFACE ROUTINES
@@ -1724,9 +1724,9 @@ SetRelationNumChecks(Relation rel, int numchecks)
  * in the expression.  (Even though we plan to reject vars, it's more
  * user-friendly to give the correct error message than "unknown var".)
  *
- * If atttypid is not InvalidOid, check that the expression is coercible
- * to the specified type.  atttypmod is needed in this case, and attname
- * is used in the error message if any.
+ * If atttypid is not InvalidOid, coerce the expression to the specified
+ * type (and typmod atttypmod).   attname is only needed in this case:
+ * it is used in the error message, if any.
  */
 Node *
 cookDefault(ParseState *pstate,
@@ -1773,24 +1773,19 @@ cookDefault(ParseState *pstate,
 				 errmsg("cannot use aggregate in DEFAULT clause")));
 
 	/*
-	 * Check that it will be possible to coerce the expression to the
-	 * column's type.  We store the expression without coercion, however,
-	 * to avoid premature coercion in cases like
-	 *
-	 * CREATE TABLE tbl (fld timestamp DEFAULT 'now');
-	 *
-	 * NB: this should match the code in rewrite/rewriteHandler.c that will
-	 * actually do the coercion, to ensure we don't accept an unusable
-	 * default expression.
+	 * Coerce the expression to the correct type and typmod, if given.  This
+	 * should match the parser's processing of non-defaulted expressions ---
+	 * see updateTargetListEntry().
 	 */
 	if (OidIsValid(atttypid))
 	{
 		Oid			type_id = exprType(expr);
 
-		if (coerce_to_target_type(pstate, expr, type_id,
-								  atttypid, atttypmod,
-								  COERCION_ASSIGNMENT,
-								  COERCE_IMPLICIT_CAST) == NULL)
+		expr = coerce_to_target_type(pstate, expr, type_id,
+									 atttypid, atttypmod,
+									 COERCION_ASSIGNMENT,
+									 COERCE_IMPLICIT_CAST);
+		if (expr == NULL)
 			ereport(ERROR,
 					(errcode(ERRCODE_DATATYPE_MISMATCH),
 					 errmsg("column \"%s\" is of type %s"
@@ -1801,7 +1796,7 @@ cookDefault(ParseState *pstate,
 					 errhint("You will need to rewrite or cast the expression.")));
 	}
 
-	return (expr);
+	return expr;
 }
 
 
diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c
index 34b6ceece9b..440e8ba7133 100644
--- a/src/backend/rewrite/rewriteHandler.c
+++ b/src/backend/rewrite/rewriteHandler.c
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.124 2003/07/25 00:01:08 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/rewrite/rewriteHandler.c,v 1.125 2003/07/29 17:21:24 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -538,10 +538,11 @@ build_column_default(Relation rel, int attrno)
 		return NULL;			/* No default anywhere */
 
 	/*
-	 * Make sure the value is coerced to the target column type (might not
-	 * be right type yet if it's not a constant!)  This should match the
-	 * parser's processing of non-defaulted expressions --- see
-	 * updateTargetListEntry().
+	 * Make sure the value is coerced to the target column type; this will
+	 * generally be true already, but there seem to be some corner cases
+	 * involving domain defaults where it might not be true.
+	 * This should match the parser's processing of non-defaulted expressions
+	 * --- see updateTargetListEntry().
 	 */
 	exprtype = exprType(expr);
 
@@ -550,10 +551,6 @@ build_column_default(Relation rel, int attrno)
 								 atttype, atttypmod,
 								 COERCION_ASSIGNMENT,
 								 COERCE_IMPLICIT_CAST);
-	/*
-	 * This really shouldn't fail; should have checked the default's
-	 * type when it was created ...
-	 */
 	if (expr == NULL)
 		ereport(ERROR,
 				(errcode(ERRCODE_DATATYPE_MISMATCH),
diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h
index 7d73598d55b..f5fb059517b 100644
--- a/src/include/catalog/catversion.h
+++ b/src/include/catalog/catversion.h
@@ -37,7 +37,7 @@
  * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: catversion.h,v 1.202 2003/06/29 00:33:44 tgl Exp $
+ * $Id: catversion.h,v 1.203 2003/07/29 17:21:27 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -53,6 +53,6 @@
  */
 
 /*							yyyymmddN */
-#define CATALOG_VERSION_NO	200306281
+#define CATALOG_VERSION_NO	200307291
 
 #endif