mirror of
https://github.com/postgres/postgres.git
synced 2025-11-18 02:02:55 +03:00
Add SHARE UPDATE EXCLUSIVE lock mode, coming soon to a VACUUM near you.
Name chosen per pghackers discussion around 6/22/01.
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.233 2001/06/30 22:03:25 petere Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.234 2001/07/09 22:18:33 tgl Exp $
|
||||
*
|
||||
* HISTORY
|
||||
* AUTHOR DATE MAJOR EVENT
|
||||
@@ -153,7 +153,7 @@ static void doNegateFloat(Value *v);
|
||||
%type <list> createdb_opt_list, createdb_opt_item
|
||||
|
||||
%type <ival> opt_lock, lock_type
|
||||
%type <boolean> opt_lmode, opt_force
|
||||
%type <boolean> opt_force
|
||||
|
||||
%type <ival> user_createdb_clause, user_createuser_clause
|
||||
%type <str> user_passwd_clause
|
||||
@@ -3277,18 +3277,18 @@ LockStmt: LOCK_P opt_table relation_name opt_lock
|
||||
}
|
||||
;
|
||||
|
||||
opt_lock: IN lock_type MODE { $$ = $2; }
|
||||
opt_lock: IN lock_type MODE { $$ = $2; }
|
||||
| /*EMPTY*/ { $$ = AccessExclusiveLock; }
|
||||
;
|
||||
|
||||
lock_type: SHARE ROW EXCLUSIVE { $$ = ShareRowExclusiveLock; }
|
||||
| ROW opt_lmode { $$ = ($2? RowShareLock: RowExclusiveLock); }
|
||||
| ACCESS opt_lmode { $$ = ($2? AccessShareLock: AccessExclusiveLock); }
|
||||
| opt_lmode { $$ = ($1? ShareLock: ExclusiveLock); }
|
||||
;
|
||||
|
||||
opt_lmode: SHARE { $$ = TRUE; }
|
||||
| EXCLUSIVE { $$ = FALSE; }
|
||||
lock_type: ACCESS SHARE { $$ = AccessShareLock; }
|
||||
| ROW SHARE { $$ = RowShareLock; }
|
||||
| ROW EXCLUSIVE { $$ = RowExclusiveLock; }
|
||||
| SHARE UPDATE EXCLUSIVE { $$ = ShareUpdateExclusiveLock; }
|
||||
| SHARE { $$ = ShareLock; }
|
||||
| SHARE ROW EXCLUSIVE { $$ = ShareRowExclusiveLock; }
|
||||
| EXCLUSIVE { $$ = ExclusiveLock; }
|
||||
| ACCESS EXCLUSIVE { $$ = AccessExclusiveLock; }
|
||||
;
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lmgr.c,v 1.48 2001/06/22 00:04:59 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lmgr.c,v 1.49 2001/07/09 22:18:33 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -33,25 +33,35 @@ static LOCKMASK LockConflicts[] = {
|
||||
(1 << ExclusiveLock) | (1 << AccessExclusiveLock),
|
||||
|
||||
/* RowExclusiveLock */
|
||||
(1 << ExclusiveLock) | (1 << ShareRowExclusiveLock) | (1 << ShareLock) |
|
||||
(1 << AccessExclusiveLock),
|
||||
(1 << ShareLock) | (1 << ShareRowExclusiveLock) |
|
||||
(1 << ExclusiveLock) | (1 << AccessExclusiveLock),
|
||||
|
||||
/* ShareUpdateExclusiveLock */
|
||||
(1 << ShareUpdateExclusiveLock) |
|
||||
(1 << ShareLock) | (1 << ShareRowExclusiveLock) |
|
||||
(1 << ExclusiveLock) | (1 << AccessExclusiveLock),
|
||||
|
||||
/* ShareLock */
|
||||
(1 << ExclusiveLock) | (1 << ShareRowExclusiveLock) |
|
||||
(1 << RowExclusiveLock) | (1 << AccessExclusiveLock),
|
||||
(1 << RowExclusiveLock) | (1 << ShareUpdateExclusiveLock) |
|
||||
(1 << ShareRowExclusiveLock) |
|
||||
(1 << ExclusiveLock) | (1 << AccessExclusiveLock),
|
||||
|
||||
/* ShareRowExclusiveLock */
|
||||
(1 << ExclusiveLock) | (1 << ShareRowExclusiveLock) |
|
||||
(1 << ShareLock) | (1 << RowExclusiveLock) | (1 << AccessExclusiveLock),
|
||||
(1 << RowExclusiveLock) | (1 << ShareUpdateExclusiveLock) |
|
||||
(1 << ShareLock) | (1 << ShareRowExclusiveLock) |
|
||||
(1 << ExclusiveLock) | (1 << AccessExclusiveLock),
|
||||
|
||||
/* ExclusiveLock */
|
||||
(1 << ExclusiveLock) | (1 << ShareRowExclusiveLock) | (1 << ShareLock) |
|
||||
(1 << RowExclusiveLock) | (1 << RowShareLock) | (1 << AccessExclusiveLock),
|
||||
(1 << RowShareLock) |
|
||||
(1 << RowExclusiveLock) | (1 << ShareUpdateExclusiveLock) |
|
||||
(1 << ShareLock) | (1 << ShareRowExclusiveLock) |
|
||||
(1 << ExclusiveLock) | (1 << AccessExclusiveLock),
|
||||
|
||||
/* AccessExclusiveLock */
|
||||
(1 << ExclusiveLock) | (1 << ShareRowExclusiveLock) | (1 << ShareLock) |
|
||||
(1 << RowExclusiveLock) | (1 << RowShareLock) |
|
||||
(1 << AccessExclusiveLock) | (1 << AccessShareLock)
|
||||
(1 << AccessShareLock) | (1 << RowShareLock) |
|
||||
(1 << RowExclusiveLock) | (1 << ShareUpdateExclusiveLock) |
|
||||
(1 << ShareLock) | (1 << ShareRowExclusiveLock) |
|
||||
(1 << ExclusiveLock) | (1 << AccessExclusiveLock)
|
||||
|
||||
};
|
||||
|
||||
@@ -63,14 +73,16 @@ static int LockPrios[] = {
|
||||
2,
|
||||
/* RowExclusiveLock */
|
||||
3,
|
||||
/* ShareLock */
|
||||
/* ShareUpdateExclusiveLock */
|
||||
4,
|
||||
/* ShareRowExclusiveLock */
|
||||
/* ShareLock */
|
||||
5,
|
||||
/* ExclusiveLock */
|
||||
/* ShareRowExclusiveLock */
|
||||
6,
|
||||
/* ExclusiveLock */
|
||||
7,
|
||||
/* AccessExclusiveLock */
|
||||
7
|
||||
8
|
||||
};
|
||||
|
||||
LOCKMETHOD LockTableId = (LOCKMETHOD) NULL;
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v 1.90 2001/06/27 23:31:39 tgl Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v 1.91 2001/07/09 22:18:33 tgl Exp $
|
||||
*
|
||||
* NOTES
|
||||
* Outside modules can create a lock table and acquire/release
|
||||
@@ -58,6 +58,7 @@ static char *lock_mode_names[] =
|
||||
"AccessShareLock",
|
||||
"RowShareLock",
|
||||
"RowExclusiveLock",
|
||||
"ShareUpdateExclusiveLock",
|
||||
"ShareLock",
|
||||
"ShareRowExclusiveLock",
|
||||
"ExclusiveLock",
|
||||
|
||||
Reference in New Issue
Block a user