diff --git a/doc/src/sgml/ref/alter_sequence.sgml b/doc/src/sgml/ref/alter_sequence.sgml
index 5c912ab892..a261ca8dc0 100644
--- a/doc/src/sgml/ref/alter_sequence.sgml
+++ b/doc/src/sgml/ref/alter_sequence.sgml
@@ -300,6 +300,13 @@ ALTER SEQUENCE [ IF EXISTS ] name S
+ ALTER SEQUENCE uses
+ ACCESS EXCLUSIVE LOCK for OWNED BY>,
+ OWNER TO>, RENAME TO>, and SET SCHEMA>,
+ and SHARE UPDATE EXCLUSIVE otherwise.
+
+
+
ALTER SEQUENCE does not affect the currval>
status for the sequence. (Before PostgreSQL
8.3, it sometimes did.)
diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c
index ad28225b36..ab7903d8aa 100644
--- a/src/backend/commands/sequence.c
+++ b/src/backend/commands/sequence.c
@@ -423,7 +423,8 @@ AlterSequence(ParseState *pstate, AlterSeqStmt *stmt)
HeapTuple tuple;
/* Open and lock sequence. */
- relid = RangeVarGetRelid(stmt->sequence, AccessShareLock, stmt->missing_ok);
+ relid = RangeVarGetRelid(stmt->sequence, ShareUpdateExclusiveLock,
+ stmt->missing_ok);
if (relid == InvalidOid)
{
ereport(NOTICE,
diff --git a/src/include/storage/lockdefs.h b/src/include/storage/lockdefs.h
index bfeb8779f7..0183185d1b 100644
--- a/src/include/storage/lockdefs.h
+++ b/src/include/storage/lockdefs.h
@@ -37,7 +37,8 @@ typedef int LOCKMODE;
#define RowShareLock 2 /* SELECT FOR UPDATE/FOR SHARE */
#define RowExclusiveLock 3 /* INSERT, UPDATE, DELETE */
#define ShareUpdateExclusiveLock 4 /* VACUUM (non-FULL),ANALYZE, CREATE
- * INDEX CONCURRENTLY */
+ * INDEX CONCURRENTLY, ALTER SEQUENCE
+ * (for non-reversible changes) */
#define ShareLock 5 /* CREATE INDEX (WITHOUT CONCURRENTLY) */
#define ShareRowExclusiveLock 6 /* like EXCLUSIVE MODE, but allows ROW
* SHARE */