diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c
index d623c0630e048d97fd673ce6cdc72d475791cfeb..56763a35a17636dbbb823856ddb2689f9912f28d 100644
--- a/src/backend/commands/sequence.c
+++ b/src/backend/commands/sequence.c
@@ -61,6 +61,7 @@ static SeqTable init_sequence(char *caller, char *name);
 static Form_pg_sequence read_info(char *caller, SeqTable elm, Buffer *buf);
 static void init_params(CreateSeqStmt *seq, Form_pg_sequence new);
 static int	get_param(DefElem *def);
+static void do_setval(char *seqname, int32 next, char iscalled);
 
 /*
  * DefineSequence
@@ -317,12 +318,9 @@ currval(PG_FUNCTION_ARGS)
 	PG_RETURN_INT32(result);
 }
 
-Datum
-setval(PG_FUNCTION_ARGS)
+static void 
+do_setval(char *seqname, int32 next, bool iscalled)
 {
-	text	   *seqin = PG_GETARG_TEXT_P(0);
-	int32		next = PG_GETARG_INT32(1);
-	char	   *seqname = get_seq_name(seqin);
 	SeqTable	elm;
 	Buffer		buf;
 	Form_pg_sequence seq;
@@ -356,7 +354,7 @@ setval(PG_FUNCTION_ARGS)
 
 	/* save info in sequence relation */
 	seq->last_value = next;		/* last fetched number */
-	seq->is_called = 't';
+	seq->is_called = iscalled ? 't' : 'f';
 
 	LockBuffer(buf, BUFFER_LOCK_UNLOCK);
 
@@ -365,6 +363,30 @@ setval(PG_FUNCTION_ARGS)
 
 	pfree(seqname);
 
+}
+
+Datum
+setval(PG_FUNCTION_ARGS)
+{
+	text	   *seqin = PG_GETARG_TEXT_P(0);
+	int32		next = PG_GETARG_INT32(1);
+	char	   *seqname = get_seq_name(seqin);
+
+	do_setval(seqname, next, true);
+
+	PG_RETURN_INT32(next);
+}
+
+Datum
+setval_and_iscalled(PG_FUNCTION_ARGS)
+{
+	text	   *seqin = PG_GETARG_TEXT_P(0);
+	int32		next = PG_GETARG_INT32(1);
+	bool		iscalled = PG_GETARG_BOOL(2);
+	char	   *seqname = get_seq_name(seqin);
+
+	do_setval(seqname, next, iscalled);
+
 	PG_RETURN_INT32(next);
 }
 
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index 920aaa442d0467ffb3010e6ba1c673322b5fe9ff..66ffa87e47308a29c86bc5da4fe0fc2e1eef4e8e 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $Id: pg_proc.h,v 1.168 2000/09/25 12:58:47 momjian Exp $
+ * $Id: pg_proc.h,v 1.169 2000/10/11 15:31:13 pjw Exp $
  *
  * NOTES
  *	  The script catalog/genbki.sh reads this file and generates .bki
@@ -1978,6 +1978,8 @@ DATA(insert OID = 1575 (  currval			PGUID 12 f t f t 1 f 23 "25" 100 0 0 100	cur
 DESCR("sequence current value");
 DATA(insert OID = 1576 (  setval			PGUID 12 f t f t 2 f 23 "25 23" 100 0 0 100  setval - ));
 DESCR("set sequence value");
+DATA(insert OID = 1765 (  setval            PGUID 12 f t f t 3 f 23 "25 23 16" 100 0 0 100  setval_and_iscalled - ));
+DESCR("set sequence value and iscalled status");
 
 DATA(insert OID = 1579 (  varbit_in			PGUID 12 f t t t 1 f 1562 "0" 100 0 0 100  varbit_in - ));
 DESCR("(internal)");
diff --git a/src/include/commands/sequence.h b/src/include/commands/sequence.h
index 4d1f846fa9a9cdef83c1530acd30dc6200d51e3c..0429d2295324b28721d5cf6691a55a73d8385f5a 100644
--- a/src/include/commands/sequence.h
+++ b/src/include/commands/sequence.h
@@ -30,6 +30,7 @@
 extern Datum nextval(PG_FUNCTION_ARGS);
 extern Datum currval(PG_FUNCTION_ARGS);
 extern Datum setval(PG_FUNCTION_ARGS);
+extern Datum setval_and_iscalled(PG_FUNCTION_ARGS);
 
 extern void DefineSequence(CreateSeqStmt *stmt);
 extern void CloseSequences(void);