diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index c1088a0bfc004aca679648976c1c0ce0e78b17c5..065e341eee2337e82d51f00eaff60e7abe9a3dab 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.67 1998/11/27 19:51:48 vadim Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.68 1998/12/13 23:50:58 thomas Exp $
  *
  * INTERFACE ROUTINES
  *		heap_create()			- Create an uncataloged heap relation
@@ -1434,6 +1434,7 @@ StoreAttrDefault(Relation rel, AttrDefault *attrdef)
 	TargetEntry *te;
 	Resdom	   *resdom;
 	Node	   *expr;
+	Oid			type;
 	char	   *adbin;
 	MemoryContext oldcxt;
 	Relation	adrel;
@@ -1460,7 +1461,9 @@ start:;
 	te = (TargetEntry *) lfirst(query->targetList);
 	resdom = te->resdom;
 	expr = te->expr;
+	type = exprType(expr);
 
+#if 0
 	if (IsA(expr, Const))
 	{
 		if (((Const *) expr)->consttype != atp->atttypid)
@@ -1474,6 +1477,26 @@ start:;
 	else if ((exprType(expr) != atp->atttypid)
 			 && !IS_BINARY_COMPATIBLE(exprType(expr), atp->atttypid))
 		elog(ERROR, "DEFAULT: type mismatched");
+#endif
+
+	if (type != atp->atttypid)
+	{
+		if (IS_BINARY_COMPATIBLE(type, atp->atttypid))
+			; /* use without change */
+		else if (can_coerce_type(1, &(type), &(atp->atttypid)))
+			expr = coerce_type(NULL, (Node *)expr, type, atp->atttypid);
+		else if (IsA(expr, Const))
+		{
+			if (*cast != 0)
+				elog(ERROR, "DEFAULT clause const type '%s' mismatched with column type '%s'",
+					 typeidTypeName(type), typeidTypeName(atp->atttypid));
+			sprintf(cast, ":: %s", typeidTypeName(atp->atttypid));
+			goto start;
+		}
+		else
+			elog(ERROR, "DEFAULT clause type '%s' mismatched with column type '%s'",
+				 typeidTypeName(type), typeidTypeName(atp->atttypid));
+	}
 
 	adbin = nodeToString(expr);
 	oldcxt = MemoryContextSwitchTo((MemoryContext) CacheCxt);