diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 2d2ab42014..dc29f347cf 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.86 1998/09/03 14:21:06 thomas Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/analyze.c,v 1.87 1998/09/16 14:25:37 thomas Exp $ * *------------------------------------------------------------------------- */ @@ -530,11 +530,26 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) constraint->def = cstring; constraint->keys = NULL; + /* The parser only allows PRIMARY KEY as a constraint for the SERIAL type. + * So, if there is a constraint of any kind, assume it is that. + * If PRIMARY KEY is specified, then don't need to gin up a UNIQUE constraint + * since that will be covered already. + * - thomas 1998-09-15 + */ if (column->constraints != NIL) + { column->constraints = lappend(column->constraints, constraint); + } else + { column->constraints = lcons(constraint, NIL); + constraint = makeNode(Constraint); + constraint->contype = CONSTR_UNIQUE; + constraint->name = makeTableName(stmt->relname, column->colname, "key", NULL); + column->constraints = lappend(column->constraints, constraint); + } + sequence = makeNode(CreateSeqStmt); sequence->seqname = pstrdup(constraint->name); sequence->options = NIL; @@ -543,12 +558,6 @@ transformCreateStmt(ParseState *pstate, CreateStmt *stmt) sequence->seqname, stmt->relname, column->colname); ilist = lcons(sequence, NIL); - - constraint = makeNode(Constraint); - constraint->contype = CONSTR_UNIQUE; - constraint->name = makeTableName(stmt->relname, column->colname, "key", NULL); - - column->constraints = lappend(column->constraints, constraint); } if (column->constraints != NIL)