Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
4fe42dfb
Commit
4fe42dfb
authored
Jul 09, 2001
by
Tom Lane
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add SHARE UPDATE EXCLUSIVE lock mode, coming soon to a VACUUM near you.
Name chosen per pghackers discussion around 6/22/01.
parent
8902f49a
Changes
8
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
143 additions
and
80 deletions
+143
-80
doc/src/sgml/mvcc.sgml
doc/src/sgml/mvcc.sgml
+28
-6
doc/src/sgml/ref/lock.sgml
doc/src/sgml/ref/lock.sgml
+53
-26
src/backend/parser/gram.y
src/backend/parser/gram.y
+11
-11
src/backend/storage/lmgr/lmgr.c
src/backend/storage/lmgr/lmgr.c
+28
-16
src/backend/storage/lmgr/lock.c
src/backend/storage/lmgr/lock.c
+2
-1
src/include/storage/lmgr.h
src/include/storage/lmgr.h
+8
-7
src/include/storage/lock.h
src/include/storage/lock.h
+3
-3
src/interfaces/ecpg/preproc/preproc.y
src/interfaces/ecpg/preproc/preproc.y
+10
-10
No files found.
doc/src/sgml/mvcc.sgml
View file @
4fe42dfb
<!--
$Header: /cvsroot/pgsql/doc/src/sgml/mvcc.sgml,v 2.1
5 2001/05/17 21:50:16 petere
Exp $
$Header: /cvsroot/pgsql/doc/src/sgml/mvcc.sgml,v 2.1
6 2001/07/09 22:18:33 tgl
Exp $
-->
<chapter id="mvcc">
...
...
@@ -441,6 +441,25 @@ ERROR: Can't serialize access due to concurrent update
</listitem>
</varlistentry>
<varlistentry>
<term>
ShareUpdateExclusiveLock
</term>
<listitem>
<para>
Acquired by <command>VACUUM</command> (without <option>FULL</option>)
and <command>LOCK TABLE</command> table
for <option>IN SHARE UPDATE EXCLUSIVE MODE</option>
statements.
</para>
<para>
Conflicts with ShareUpdateExclusiveLock, ShareLock,
ShareRowExclusiveLock, ExclusiveLock and AccessExclusiveLock modes.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
ShareLock
...
...
@@ -454,7 +473,8 @@ ERROR: Can't serialize access due to concurrent update
</para>
<para>
Conflicts with RowExclusiveLock, ShareRowExclusiveLock,
Conflicts with RowExclusiveLock, ShareUpdateExclusiveLock,
ShareRowExclusiveLock,
ExclusiveLock and AccessExclusiveLock modes.
</para>
</listitem>
...
...
@@ -471,7 +491,8 @@ ERROR: Can't serialize access due to concurrent update
</para>
<para>
Conflicts with RowExclusiveLock, ShareLock, ShareRowExclusiveLock,
Conflicts with RowExclusiveLock, ShareUpdateExclusiveLock,
ShareLock, ShareRowExclusiveLock,
ExclusiveLock and AccessExclusiveLock modes.
</para>
</listitem>
...
...
@@ -488,7 +509,8 @@ ERROR: Can't serialize access due to concurrent update
</para>
<para>
Conflicts with RowShareLock, RowExclusiveLock, ShareLock,
Conflicts with RowShareLock, RowExclusiveLock,
ShareUpdateExclusiveLock, ShareLock,
ShareRowExclusiveLock, ExclusiveLock and AccessExclusiveLock
modes.
</para>
...
...
@@ -503,13 +525,13 @@ ERROR: Can't serialize access due to concurrent update
<para>
Acquired by <command>ALTER TABLE</command>,
<command>DROP TABLE</command>,
<command>VACUUM</command> and <command>LOCK TABLE</command>
<command>VACUUM
FULL
</command> and <command>LOCK TABLE</command>
statements.
</para>
<para>
Conflicts with all modes (AccessShareLock, RowShareLock,
RowExclusiveLock, ShareLock,
RowExclusiveLock, Share
UpdateExclusiveLock, Share
Lock,
ShareRowExclusiveLock, ExclusiveLock and AccessExclusiveLock).
</para>
</listitem>
...
...
doc/src/sgml/ref/lock.sgml
View file @
4fe42dfb
<!--
$Header: /cvsroot/pgsql/doc/src/sgml/ref/lock.sgml,v 1.2
3 2000/12/25 23:15:26 petere
Exp $
$Header: /cvsroot/pgsql/doc/src/sgml/ref/lock.sgml,v 1.2
4 2001/07/09 22:18:33 tgl
Exp $
Postgres documentation
-->
...
...
@@ -20,12 +20,16 @@ Postgres documentation
</refnamediv>
<refsynopsisdiv>
<refsynopsisdivinfo>
<date>
1999-07-20
</date>
<date>
2001-07-09
</date>
</refsynopsisdivinfo>
<synopsis>
LOCK [ TABLE ] <replaceable class="PARAMETER">name</replaceable>
LOCK [ TABLE ] <replaceable class="PARAMETER">name</replaceable> IN [ ROW | ACCESS ] { SHARE | EXCLUSIVE } MODE
LOCK [ TABLE ] <replaceable class="PARAMETER">name</replaceable> IN SHARE ROW EXCLUSIVE MODE
LOCK [ TABLE ] <replaceable class="PARAMETER">name</replaceable> IN <replaceable class="PARAMETER">lockmode</replaceable> MODE
where <replaceable class="PARAMETER">lockmode</replaceable> is one of:
ACCESS SHARE | ROW SHARE | ROW EXCLUSIVE | SHARE UPDATE EXCLUSIVE |
SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE | ACCESS EXCLUSIVE
</synopsis>
<refsect2 id="R2-SQL-LOCK-1">
...
...
@@ -33,7 +37,6 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">name</replaceable> IN SHARE ROW EX
<date>1999-06-09</date>
</refsect2info>
<title>
Inputs
</title>
...
...
@@ -62,7 +65,7 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">name</replaceable> IN SHARE ROW EX
This is the least restrictive lock mode. It conflicts only with
ACCESS EXCLUSIVE mode. It is used to protect a table from being
modified by concurrent <command>ALTER TABLE</command>,
<command>DROP TABLE</command> and <command>VACUUM
</command>
<command>DROP TABLE</command> and <command>VACUUM
FULL</command>
commands.
</para>
</listitem>
...
...
@@ -102,6 +105,25 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">name</replaceable> IN SHARE ROW EX
</listitem>
</varlistentry>
<varlistentry>
<term>SHARE UPDATE EXCLUSIVE MODE</term>
<listitem>
<note>
<para>
Automatically acquired by <command>VACUUM</command> (without
<option>FULL</option>).
</para>
</note>
<para>
Conflicts with SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE,
EXCLUSIVE and
ACCESS EXCLUSIVE modes. This mode protects a table against
concurrent schema changes and VACUUMs.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>SHARE MODE</term>
<listitem>
...
...
@@ -113,9 +135,10 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">name</replaceable> IN SHARE ROW EX
</note>
<para>
Conflicts with ROW EXCLUSIVE, SHARE ROW EXCLUSIVE, EXCLUSIVE and
Conflicts with ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE,
SHARE ROW EXCLUSIVE, EXCLUSIVE and
ACCESS EXCLUSIVE modes. This mode protects a table against
concurrent updates.
concurrent
data
updates.
</para>
</listitem>
</varlistentry>
...
...
@@ -125,14 +148,14 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">name</replaceable> IN SHARE ROW EX
<listitem>
<note>
<para>
This is like EXCLUSIVE MODE, but allows
SHARE ROW
locks
This is like EXCLUSIVE MODE, but allows
ROW SHARE
locks
by others.
</para>
</note>
<para>
Conflicts with ROW EXCLUSIVE, SHARE
, SHARE ROW EXCLUSIV
E,
EXCLUSIVE and ACCESS EXCLUSIVE modes.
Conflicts with ROW EXCLUSIVE, SHARE
UPDATE EXCLUSIVE, SHAR
E,
SHARE ROW EXCLUSIVE,
EXCLUSIVE and ACCESS EXCLUSIVE modes.
</para>
</listitem>
</varlistentry>
...
...
@@ -149,7 +172,8 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">name</replaceable> IN SHARE ROW EX
</note>
<para>
Conflicts with ROW SHARE, ROW EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE,
Conflicts with ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE,
SHARE, SHARE ROW EXCLUSIVE,
EXCLUSIVE and ACCESS EXCLUSIVE modes.
</para>
</listitem>
...
...
@@ -161,9 +185,10 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">name</replaceable> IN SHARE ROW EX
<note>
<para>
Automatically acquired by <command>ALTER TABLE</command>,
<command>DROP TABLE</command>, <command>VACUUM</command> statements.
This is the most restrictive lock mode which conflicts with all other
lock modes and protects a locked table from any concurrent operations.
<command>DROP TABLE</command>, <command>VACUUM FULL</command>
statements.
This is the most restrictive lock mode which
protects a locked table from any concurrent operations.
</para>
</note>
...
...
@@ -174,6 +199,10 @@ LOCK [ TABLE ] <replaceable class="PARAMETER">name</replaceable> IN SHARE ROW EX
lock mode option).
</para>
</note>
<para>
Conflicts with all lock modes.
</para>
</listitem>
</varlistentry>
</variablelist>
...
...
@@ -241,7 +270,11 @@ ERROR <replaceable class="PARAMETER">name</replaceable>: Table does not exist.
<term>EXCLUSIVE</term>
<listitem>
<para>
Exclusive lock that prevents other locks from being granted.
An exclusive lock prevents other locks of the same type from being
granted. (Note: ROW EXCLUSIVE mode does not follow this naming
convention perfectly, since it is shared at the level of the table;
it is exclusive only with respect to specific rows that are being
updated.)
</para>
</listitem>
</varlistentry>
...
...
@@ -250,7 +283,8 @@ ERROR <replaceable class="PARAMETER">name</replaceable>: Table does not exist.
<term>SHARE</term>
<listitem>
<para>
Allows others to share lock. Prevents EXCLUSIVE locks.
A shared lock allows others to also hold the same type of lock,
but prevents the corresponding EXCLUSIVE lock from being granted.
</para>
</listitem>
</varlistentry>
...
...
@@ -273,13 +307,6 @@ ERROR <replaceable class="PARAMETER">name</replaceable>: Table does not exist.
</listitem>
</varlistentry>
</variablelist>
<note>
<para>
If EXCLUSIVE or SHARE are not specified, EXCLUSIVE is assumed.
Locks exist for the duration of the transaction.
</para>
</note>
</para>
<para>
...
...
@@ -370,8 +397,8 @@ ERROR <replaceable class="PARAMETER">name</replaceable>: Table does not exist.
</para>
<para>
Except for ACCESS SHARE
/EXCLUSIVE lock modes, all other
<productname>Postgres</productname> lock modes and the
Except for ACCESS SHARE
, ACCESS EXCLUSIVE, and SHARE UPDATE EXCLUSIVE lock
modes, the
<productname>Postgres</productname> lock modes and the
<command>LOCK TABLE</command> syntax are compatible with those
present in <productname>Oracle</productname>.
</para>
...
...
src/backend/parser/gram.y
View file @
4fe42dfb
...
...
@@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.23
3 2001/06/30 22:03:25 petere
Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.23
4 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
...
...
@@ -3281,14 +3281,14 @@ opt_lock: IN lock_type MODE { $$ = $2; }
| /*EMPTY*/ { $$ = AccessExclusiveLock; }
;
lock_type:
SHARE ROW EXCLUSIVE { $$ = ShareRowExclusiv
eLock; }
| 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 { $$ = AccessShar
eLock; }
| ROW
SHARE { $$ = RowShareLock
; }
|
ROW EXCLUSIVE { $$ = RowExclusiveLock
; }
|
SHARE UPDATE EXCLUSIVE { $$ = ShareUpdateExclusiveLock
; }
| SHARE { $$ = ShareLock; }
| SHARE ROW EXCLUSIVE { $$ = ShareRowExclusiveLock; }
| EXCLUSIVE { $$ = ExclusiveLock
; }
|
ACCESS EXCLUSIVE { $$ = AccessExclusiveLock
; }
;
...
...
src/backend/storage/lmgr/lmgr.c
View file @
4fe42dfb
...
...
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lmgr.c,v 1.4
8 2001/06/22 00:04:59
tgl Exp $
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lmgr.c,v 1.4
9 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 */
/* Share
UpdateExclusive
Lock */
4
,
/* Share
RowExclusive
Lock */
/* ShareLock */
5
,
/* ExclusiveLock */
/*
ShareRow
ExclusiveLock */
6
,
/* ExclusiveLock */
7
,
/* AccessExclusiveLock */
7
8
};
LOCKMETHOD
LockTableId
=
(
LOCKMETHOD
)
NULL
;
...
...
src/backend/storage/lmgr/lock.c
View file @
4fe42dfb
...
...
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v 1.9
0 2001/06/27 23:31:39
tgl Exp $
* $Header: /cvsroot/pgsql/src/backend/storage/lmgr/lock.c,v 1.9
1 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"
,
...
...
src/include/storage/lmgr.h
View file @
4fe42dfb
...
...
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $Id: lmgr.h,v 1.3
1 2001/06/22 00:04:59
tgl Exp $
* $Id: lmgr.h,v 1.3
2 2001/07/09 22:18:34
tgl Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -25,13 +25,14 @@
#define AccessShareLock 1
/* SELECT */
#define RowShareLock 2
/* SELECT FOR UPDATE */
#define RowExclusiveLock 3
/* INSERT, UPDATE, DELETE */
#define ShareLock 4
/* CREATE INDEX */
#define ShareRowExclusiveLock 5
/* like EXCLUSIVE MODE, allows
* SHARE ROW */
#define ExclusiveLock 6
/* blocks ROW SHARE/SELECT...FOR
#define ShareUpdateExclusiveLock 4
/* VACUUM (non-FULL) */
#define ShareLock 5
/* CREATE INDEX */
#define ShareRowExclusiveLock 6
/* like EXCLUSIVE MODE, but allows
* ROW SHARE */
#define ExclusiveLock 7
/* blocks ROW SHARE/SELECT...FOR
* UPDATE */
#define AccessExclusiveLock
7
/* ALTER TABLE, DROP TABLE,
* VACUUM, and unqualified LOCK
#define AccessExclusiveLock
8
/* ALTER TABLE, DROP TABLE,
* VACUUM
FULL
, and unqualified LOCK
* TABLE */
/*
...
...
src/include/storage/lock.h
View file @
4fe42dfb
...
...
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
* $Id: lock.h,v 1.5
0 2001/06/27 23:31:39
tgl Exp $
* $Id: lock.h,v 1.5
1 2001/07/09 22:18:34
tgl Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -49,7 +49,7 @@ typedef int LOCKMODE;
typedef
int
LOCKMETHOD
;
/* MAX_LOCKMODES cannot be larger than the # of bits in LOCKMASK */
#define MAX_LOCKMODES
8
#define MAX_LOCKMODES
10
/*
* MAX_LOCK_METHODS corresponds to the number of spin locks allocated in
...
...
@@ -91,7 +91,7 @@ typedef int LOCKMETHOD;
*
* prio -- each lockmode has a priority, so, for example, waiting
* writers can be given priority over readers (to avoid
* starvation).
* starvation).
XXX this field is not actually used at present!
*
* masterlock -- synchronizes access to the table
*/
...
...
src/interfaces/ecpg/preproc/preproc.y
View file @
4fe42dfb
...
...
@@ -326,7 +326,7 @@ make_name(void)
%type <str> createdb_opt_list opt_encoding OptInherit Geometric
%type <str> DropdbStmt ClusterStmt grantee RevokeStmt Bit bit
%type <str> GrantStmt privileges operation_commalist operation PosAllConst
%type <str> opt_cursor
opt_lmode
ConstraintsSetStmt comment_tg AllConst
%type <str> opt_cursor ConstraintsSetStmt comment_tg AllConst
%type <str> case_expr when_clause_list case_default case_arg when_clause
%type <str> select_clause opt_select_limit select_limit_value ConstraintTimeSpec
%type <str> select_offset_value ReindexStmt join_type opt_boolean
...
...
@@ -2440,14 +2440,14 @@ opt_lock: IN lock_type MODE { $$ = cat_str(3, make_str("in"), $2, ma
| /*EMPTY*/ { $$ = EMPTY;}
;
lock_type: SHARE ROW EXCLUSIVE { $$ = make_str("share row exclusive"); }
| ROW opt_lmode { $$ = cat2_str(make_str("row"), $2);}
| ACCESS opt_lmode { $$ = cat2_str(make_str("access"), $2);}
| opt_lmode { $$ = $1; }
;
opt_lmode: SHARE { $$ = make_str("share"); }
lock_type: ACCESS SHARE { $$ = make_str("access share"); }
| ROW SHARE { $$ = make_str("access share"); }
| ROW EXCLUSIVE { $$ = make_str("row exclusive"); }
| SHARE UPDATE EXCLUSIVE { $$ = make_str("share update exclusive"); }
| SHARE { $$ = make_str("share"); }
| SHARE ROW EXCLUSIVE { $$ = make_str("share row exclusive"); }
| EXCLUSIVE { $$ = make_str("exclusive"); }
| ACCESS EXCLUSIVE { $$ = make_str("access exclusive"); }
;
/*****************************************************************************
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment