*** a/src/backend/commands/tablecmds.c
--- b/src/backend/commands/tablecmds.c
***************
*** 4795,4815 **** ATExecAddColumn(List **wqueue, AlteredTableInfo *tab, Relation rel,
  			Oid			baseTypeId;
  			int32		baseTypeMod;
  			Oid			baseTypeColl;
  
  			baseTypeMod = typmod;
  			baseTypeId = getBaseTypeAndTypmod(typeOid, &baseTypeMod);
  			baseTypeColl = get_typcollation(baseTypeId);
! 			defval = (Expr *) makeNullConst(baseTypeId, baseTypeMod, baseTypeColl);
! 			defval = (Expr *) coerce_to_target_type(NULL,
! 													(Node *) defval,
! 													baseTypeId,
! 													typeOid,
! 													typmod,
! 													COERCION_ASSIGNMENT,
! 													COERCE_IMPLICIT_CAST,
! 													-1);
! 			if (defval == NULL) /* should not happen */
  				elog(ERROR, "failed to coerce base type to domain");
  		}
  
  		if (defval)
--- 4795,4833 ----
  			Oid			baseTypeId;
  			int32		baseTypeMod;
  			Oid			baseTypeColl;
+ 			Expr	   *nullval;
+ 			ExprState  *nullvalState;
+ 			ExprContext *econtext;
+ 			bool		isnull;
+ 			Snapshot	snapshot;
+ 			EState	   *estate;
  
  			baseTypeMod = typmod;
  			baseTypeId = getBaseTypeAndTypmod(typeOid, &baseTypeMod);
  			baseTypeColl = get_typcollation(baseTypeId);
! 			nullval = (Expr *) makeNullConst(baseTypeId, baseTypeMod, baseTypeColl);
! 			nullval = (Expr *) coerce_to_target_type(NULL,
! 													 (Node *) nullval,
! 													 baseTypeId,
! 													 typeOid,
! 													 typmod,
! 													 COERCION_ASSIGNMENT,
! 													 COERCE_IMPLICIT_CAST,
! 													 -1);
! 			if (nullval == NULL) /* should not happen */
  				elog(ERROR, "failed to coerce base type to domain");
+ 			nullval = expression_planner(nullval);
+ 			nullvalState = ExecInitExpr(nullval, NULL);
+ 			estate = CreateExecutorState();
+ 			econtext = GetPerTupleExprContext(estate);
+ 			snapshot = RegisterSnapshot(GetLatestSnapshot());
+ 			(void) ExecEvalExpr(nullvalState,
+ 								econtext,
+ 								&isnull,
+ 								NULL);
+ 			(void) isnull;
+ 			UnregisterSnapshot(snapshot);
+ 			FreeExecutorState(estate);
  		}
  
  		if (defval)
