diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c
index 2bdcef170f3ea72478ec2b500e295c5c456cbebe..ea96f2eb91069e43c6215bb5f3d237b5592f5cb6 100644
--- a/src/backend/parser/analyze.c
+++ b/src/backend/parser/analyze.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.80 1998/08/18 00:48:54 scrappy Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.81 1998/08/25 15:08:12 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -472,7 +472,7 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt)
 	Constraint *constraint;
 	List	   *keys;
 	Ident	   *key;
-	List	   *ilist;
+	List	   *ilist = NIL;
 	IndexStmt  *index;
 	IndexElem  *iparam;
 
@@ -492,6 +492,46 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt)
 			case T_ColumnDef:
 				column = (ColumnDef *) element;
 				columns = lappend(columns, column);
+
+				if (column->is_sequence)
+				{
+					char *cstring;
+					CreateSeqStmt *sequence;
+
+					constraint = makeNode(Constraint);
+					constraint->contype = CONSTR_DEFAULT;
+					constraint->name = makeTableName(stmt->relname, column->colname, "seq", NULL);
+					cstring = palloc(9+strlen(constraint->name)+2+1);
+					strcpy(cstring, "nextval('");
+					strcat(cstring, constraint->name);
+					strcat(cstring, "')");
+					constraint->def = cstring;
+					constraint->keys = NULL;
+
+					if (column->constraints != NIL)
+					{
+						column->constraints = lappend(column->constraints, constraint);
+					}
+					else
+					{
+						column->constraints = lcons(constraint, NIL);
+					}
+
+					sequence = makeNode(CreateSeqStmt);
+					sequence->seqname = constraint->name;
+					sequence->options = NIL;
+
+					elog(NOTICE, "CREATE TABLE will create implicit sequence %s for SERIAL column %s.%s",
+						 sequence->seqname, stmt->relname, column->colname);
+
+					ilist = lcons(sequence, NIL);
+
+					constraint = makeNode(Constraint);
+					constraint->contype = CONSTR_UNIQUE;
+
+					column->constraints = lappend(column->constraints, constraint);
+				}
+
 				if (column->constraints != NIL)
 				{
 					clist = column->constraints;
@@ -596,7 +636,6 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt)
  *	names for indices turn out to be redundant, or a user might have specified
  *	extra useless indices which might hurt performance. - thomas 1997-12-08
  */
-	ilist = NIL;
 	while (dlist != NIL)
 	{
 		constraint = lfirst(dlist);