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 */