diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c
index f5d41b3df2c9d2b4d53aca8de358fc4a8af2499a..c3ea6a14c0064ab8052b43e96718e2c8fd4ffdba 100644
--- a/src/backend/commands/sequence.c
+++ b/src/backend/commands/sequence.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/sequence.c,v 1.90 2002/11/11 22:19:21 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/sequence.c,v 1.91 2003/02/13 05:25:24 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -781,6 +781,7 @@ init_params(CreateSeqStmt *seq, Form_pg_sequence new)
 	DefElem    *max_value = NULL;
 	DefElem    *min_value = NULL;
 	DefElem    *cache_value = NULL;
+	bool		is_cycled_set = false;
 	List	   *option;
 
 	new->is_cycled = false;
@@ -789,17 +790,42 @@ init_params(CreateSeqStmt *seq, Form_pg_sequence new)
 		DefElem    *defel = (DefElem *) lfirst(option);
 
 		if (strcmp(defel->defname, "increment") == 0)
+		{
+			if (increment_by)
+				elog(ERROR, "DefineSequence: INCREMENT BY defined twice");
 			increment_by = defel;
+		}
 		else if (strcmp(defel->defname, "start") == 0)
+		{
+			if (last_value)
+				elog(ERROR, "DefineSequence: LAST VALUE defined twice");
 			last_value = defel;
+		}
 		else if (strcmp(defel->defname, "maxvalue") == 0)
+		{
+			if (max_value)
+				elog(ERROR, "DefineSequence: MAX VALUE defined twice");
 			max_value = defel;
+		}
 		else if (strcmp(defel->defname, "minvalue") == 0)
+		{
+			if (min_value)
+				elog(ERROR, "DefineSequence: MIN VALUE defined twice");
 			min_value = defel;
+		}
 		else if (strcmp(defel->defname, "cache") == 0)
+		{
+			if (cache_value)
+				elog(ERROR, "DefineSequence: CACHE defined twice");
 			cache_value = defel;
+		}
 		else if (strcmp(defel->defname, "cycle") == 0)
+		{
+			if (is_cycled_set)
+				elog(ERROR, "DefineSequence: CYCLE defined twice");
+			is_cycled_set = true;
 			new->is_cycled = (defel->arg != NULL);
+		}
 		else
 			elog(ERROR, "DefineSequence: option \"%s\" not recognized",
 				 defel->defname);
@@ -810,7 +836,7 @@ init_params(CreateSeqStmt *seq, Form_pg_sequence new)
 	else if ((new->increment_by = defGetInt64(increment_by)) == 0)
 		elog(ERROR, "DefineSequence: can't INCREMENT by 0");
 
-	if (max_value == (DefElem *) NULL)	/* MAXVALUE */
+	if (max_value == (DefElem *) NULL || !max_value->arg)	/* MAXVALUE */
 	{
 		if (new->increment_by > 0)
 			new->max_value = SEQ_MAXVALUE;		/* ascending seq */
@@ -820,7 +846,7 @@ init_params(CreateSeqStmt *seq, Form_pg_sequence new)
 	else
 		new->max_value = defGetInt64(max_value);
 
-	if (min_value == (DefElem *) NULL)	/* MINVALUE */
+	if (min_value == (DefElem *) NULL || !min_value->arg)	/* MINVALUE */
 	{
 		if (new->increment_by > 0)
 			new->min_value = 1; /* ascending seq */
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index f6ce850f37ba8400268905a741e1d4c5f11da4df..5a7dff919d89c254b4e2479548c4872f53c7c224 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -11,7 +11,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.402 2003/02/13 05:19:59 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.403 2003/02/13 05:25:24 momjian Exp $
  *
  * HISTORY
  *	  AUTHOR			DATE			MAJOR EVENT
@@ -1909,6 +1909,14 @@ OptSeqElem: CACHE NumericOnly
 				{
 					$$ = makeDefElem("minvalue", (Node *)$2);
 				}
+			| NO MAXVALUE
+				{
+					$$ = makeDefElem("maxvalue", (Node *)NULL);
+				}
+			| NO MINVALUE
+				{
+					$$ = makeDefElem("minvalue", (Node *)NULL);
+				}
 			| START opt_with NumericOnly
 				{
 					$$ = makeDefElem("start", (Node *)$3);