PostgreSQL Source Code git master
lockoptions.h
Go to the documentation of this file.
1/*-------------------------------------------------------------------------
2 *
3 * lockoptions.h
4 * Common header for some locking-related declarations.
5 *
6 *
7 * Copyright (c) 2014-2025, PostgreSQL Global Development Group
8 *
9 * src/include/nodes/lockoptions.h
10 *
11 *-------------------------------------------------------------------------
12 */
13#ifndef LOCKOPTIONS_H
14#define LOCKOPTIONS_H
15
16/*
17 * This enum represents the different strengths of FOR UPDATE/SHARE clauses.
18 * The ordering here is important, because the highest numerical value takes
19 * precedence when a RTE is specified multiple ways. See applyLockingClause.
20 */
22{
23 LCS_NONE, /* no such clause - only used in PlanRowMark */
24 LCS_FORKEYSHARE, /* FOR KEY SHARE */
25 LCS_FORSHARE, /* FOR SHARE */
26 LCS_FORNOKEYUPDATE, /* FOR NO KEY UPDATE */
27 LCS_FORUPDATE, /* FOR UPDATE */
29
30/*
31 * This enum controls how to deal with rows being locked by FOR UPDATE/SHARE
32 * clauses (i.e., it represents the NOWAIT and SKIP LOCKED options).
33 * The ordering here is important, because the highest numerical value takes
34 * precedence when a RTE is specified multiple ways. See applyLockingClause.
35 */
36typedef enum LockWaitPolicy
37{
38 /* Wait for the lock to become available (default behavior) */
40 /* Skip rows that can't be locked (SKIP LOCKED) */
42 /* Raise an error if a row cannot be locked (NOWAIT) */
45
46/*
47 * Possible lock modes for a tuple.
48 */
49typedef enum LockTupleMode
50{
51 /* SELECT FOR KEY SHARE */
53 /* SELECT FOR SHARE */
55 /* SELECT FOR NO KEY UPDATE, and UPDATEs that don't modify key columns */
57 /* SELECT FOR UPDATE, UPDATEs that modify key columns, and DELETE */
60
61#endif /* LOCKOPTIONS_H */
LockWaitPolicy
Definition: lockoptions.h:37
@ LockWaitSkip
Definition: lockoptions.h:41
@ LockWaitBlock
Definition: lockoptions.h:39
@ LockWaitError
Definition: lockoptions.h:43
LockTupleMode
Definition: lockoptions.h:50
@ LockTupleExclusive
Definition: lockoptions.h:58
@ LockTupleNoKeyExclusive
Definition: lockoptions.h:56
@ LockTupleShare
Definition: lockoptions.h:54
@ LockTupleKeyShare
Definition: lockoptions.h:52
LockClauseStrength
Definition: lockoptions.h:22
@ LCS_FORUPDATE
Definition: lockoptions.h:27
@ LCS_NONE
Definition: lockoptions.h:23
@ LCS_FORSHARE
Definition: lockoptions.h:25
@ LCS_FORKEYSHARE
Definition: lockoptions.h:24
@ LCS_FORNOKEYUPDATE
Definition: lockoptions.h:26