PostgreSQL Source Code  git master
lmgr.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * lmgr.h
4  * POSTGRES lock manager definitions.
5  *
6  *
7  * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  * src/include/storage/lmgr.h
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef LMGR_H
15 #define LMGR_H
16 
17 #include "lib/stringinfo.h"
18 #include "storage/itemptr.h"
19 #include "storage/lock.h"
20 #include "utils/rel.h"
21 
22 
23 /* XactLockTableWait operations */
24 typedef enum XLTW_Oper
25 {
36 
37 extern void RelationInitLockInfo(Relation relation);
38 
39 /* Lock a relation */
40 extern void LockRelationOid(Oid relid, LOCKMODE lockmode);
41 extern void LockRelationId(LockRelId *relid, LOCKMODE lockmode);
42 extern bool ConditionalLockRelationOid(Oid relid, LOCKMODE lockmode);
43 extern void UnlockRelationId(LockRelId *relid, LOCKMODE lockmode);
44 extern void UnlockRelationOid(Oid relid, LOCKMODE lockmode);
45 
46 extern void LockRelation(Relation relation, LOCKMODE lockmode);
47 extern bool ConditionalLockRelation(Relation relation, LOCKMODE lockmode);
48 extern void UnlockRelation(Relation relation, LOCKMODE lockmode);
49 extern bool CheckRelationLockedByMe(Relation relation, LOCKMODE lockmode,
50  bool orstronger);
51 extern bool LockHasWaitersRelation(Relation relation, LOCKMODE lockmode);
52 
53 extern void LockRelationIdForSession(LockRelId *relid, LOCKMODE lockmode);
54 extern void UnlockRelationIdForSession(LockRelId *relid, LOCKMODE lockmode);
55 
56 /* Lock a relation for extension */
57 extern void LockRelationForExtension(Relation relation, LOCKMODE lockmode);
58 extern void UnlockRelationForExtension(Relation relation, LOCKMODE lockmode);
60  LOCKMODE lockmode);
61 extern int RelationExtensionLockWaiterCount(Relation relation);
62 
63 /* Lock to recompute pg_database.datfrozenxid in the current database */
64 extern void LockDatabaseFrozenIds(LOCKMODE lockmode);
65 
66 /* Lock a page (currently only used within indexes) */
67 extern void LockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode);
68 extern bool ConditionalLockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode);
69 extern void UnlockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode);
70 
71 /* Lock a tuple (see heap_lock_tuple before assuming you understand this) */
72 extern void LockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode);
73 extern bool ConditionalLockTuple(Relation relation, ItemPointer tid,
74  LOCKMODE lockmode);
75 extern void UnlockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode);
76 
77 /* Lock an XID (used to wait for a transaction to finish) */
78 extern void XactLockTableInsert(TransactionId xid);
79 extern void XactLockTableDelete(TransactionId xid);
80 extern void XactLockTableWait(TransactionId xid, Relation rel,
81  ItemPointer ctid, XLTW_Oper oper);
83 
84 /* Lock VXIDs, specified by conflicting locktags */
85 extern void WaitForLockers(LOCKTAG heaplocktag, LOCKMODE lockmode, bool progress);
86 extern void WaitForLockersMultiple(List *locktags, LOCKMODE lockmode, bool progress);
87 
88 /* Lock an XID for tuple insertion (used to wait for an insertion to finish) */
92 
93 /* Lock a general object (other than a relation) of the current database */
94 extern void LockDatabaseObject(Oid classid, Oid objid, uint16 objsubid,
95  LOCKMODE lockmode);
96 extern void UnlockDatabaseObject(Oid classid, Oid objid, uint16 objsubid,
97  LOCKMODE lockmode);
98 
99 /* Lock a shared-across-databases object (other than a relation) */
100 extern void LockSharedObject(Oid classid, Oid objid, uint16 objsubid,
101  LOCKMODE lockmode);
102 extern bool ConditionalLockSharedObject(Oid classid, Oid objid, uint16 objsubid,
103  LOCKMODE lockmode);
104 extern void UnlockSharedObject(Oid classid, Oid objid, uint16 objsubid,
105  LOCKMODE lockmode);
106 
107 extern void LockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid,
108  LOCKMODE lockmode);
109 extern void UnlockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid,
110  LOCKMODE lockmode);
111 
112 extern void LockApplyTransactionForSession(Oid suboid, TransactionId xid, uint16 objid,
113  LOCKMODE lockmode);
114 extern void UnlockApplyTransactionForSession(Oid suboid, TransactionId xid, uint16 objid,
115  LOCKMODE lockmode);
116 
117 /* Describe a locktag for error messages */
118 extern void DescribeLockTag(StringInfo buf, const LOCKTAG *tag);
119 
120 extern const char *GetLockNameFromTagType(uint16 locktag_type);
121 
122 #endif /* LMGR_H */
uint32 BlockNumber
Definition: block.h:31
unsigned short uint16
Definition: c.h:492
unsigned int uint32
Definition: c.h:493
uint32 TransactionId
Definition: c.h:639
#define token
Definition: indent_globs.h:126
bool ConditionalLockRelationOid(Oid relid, LOCKMODE lockmode)
Definition: lmgr.c:151
void XactLockTableWait(TransactionId xid, Relation rel, ItemPointer ctid, XLTW_Oper oper)
Definition: lmgr.c:667
void LockSharedObject(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:1045
bool ConditionalLockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode)
Definition: lmgr.c:532
void UnlockRelationOid(Oid relid, LOCKMODE lockmode)
Definition: lmgr.c:227
void LockDatabaseObject(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:1004
void UnlockRelation(Relation relation, LOCKMODE lockmode)
Definition: lmgr.c:310
void DescribeLockTag(StringInfo buf, const LOCKTAG *tag)
Definition: lmgr.c:1205
void SpeculativeInsertionWait(TransactionId xid, uint32 token)
Definition: lmgr.c:824
bool ConditionalLockSharedObject(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:1069
void UnlockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:1143
void WaitForLockersMultiple(List *locktags, LOCKMODE lockmode, bool progress)
Definition: lmgr.c:907
void LockRelationIdForSession(LockRelId *relid, LOCKMODE lockmode)
Definition: lmgr.c:397
void RelationInitLockInfo(Relation relation)
Definition: lmgr.c:71
bool ConditionalLockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode)
Definition: lmgr.c:588
void LockRelationOid(Oid relid, LOCKMODE lockmode)
Definition: lmgr.c:108
void LockRelation(Relation relation, LOCKMODE lockmode)
Definition: lmgr.c:244
void UnlockRelationId(LockRelId *relid, LOCKMODE lockmode)
Definition: lmgr.c:212
void WaitForLockers(LOCKTAG heaplocktag, LOCKMODE lockmode, bool progress)
Definition: lmgr.c:985
void XactLockTableDelete(TransactionId xid)
Definition: lmgr.c:643
void LockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode)
Definition: lmgr.c:568
void XactLockTableInsert(TransactionId xid)
Definition: lmgr.c:626
uint32 SpeculativeInsertionLockAcquire(TransactionId xid)
Definition: lmgr.c:782
void LockRelationForExtension(Relation relation, LOCKMODE lockmode)
Definition: lmgr.c:430
bool ConditionalXactLockTableWait(TransactionId xid)
Definition: lmgr.c:740
bool CheckRelationLockedByMe(Relation relation, LOCKMODE lockmode, bool orstronger)
Definition: lmgr.c:330
XLTW_Oper
Definition: lmgr.h:25
@ XLTW_FetchUpdated
Definition: lmgr.h:33
@ XLTW_None
Definition: lmgr.h:26
@ XLTW_Lock
Definition: lmgr.h:29
@ XLTW_Delete
Definition: lmgr.h:28
@ XLTW_InsertIndex
Definition: lmgr.h:31
@ XLTW_LockUpdated
Definition: lmgr.h:30
@ XLTW_RecheckExclusionConstr
Definition: lmgr.h:34
@ XLTW_Update
Definition: lmgr.h:27
@ XLTW_InsertIndexUnique
Definition: lmgr.h:32
void UnlockApplyTransactionForSession(Oid suboid, TransactionId xid, uint16 objid, LOCKMODE lockmode)
Definition: lmgr.c:1183
void SpeculativeInsertionLockRelease(TransactionId xid)
Definition: lmgr.c:808
void LockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode)
Definition: lmgr.c:513
bool ConditionalLockRelationForExtension(Relation relation, LOCKMODE lockmode)
Definition: lmgr.c:448
const char * GetLockNameFromTagType(uint16 locktag_type)
Definition: lmgr.c:1302
void UnlockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode)
Definition: lmgr.c:548
void UnlockRelationIdForSession(LockRelId *relid, LOCKMODE lockmode)
Definition: lmgr.c:410
bool ConditionalLockRelation(Relation relation, LOCKMODE lockmode)
Definition: lmgr.c:275
void LockDatabaseFrozenIds(LOCKMODE lockmode)
Definition: lmgr.c:497
void UnlockRelationForExtension(Relation relation, LOCKMODE lockmode)
Definition: lmgr.c:480
void UnlockSharedObject(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:1104
void LockApplyTransactionForSession(Oid suboid, TransactionId xid, uint16 objid, LOCKMODE lockmode)
Definition: lmgr.c:1165
void LockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:1125
void LockRelationId(LockRelId *relid, LOCKMODE lockmode)
Definition: lmgr.c:184
bool LockHasWaitersRelation(Relation relation, LOCKMODE lockmode)
Definition: lmgr.c:373
void UnlockDatabaseObject(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:1025
int RelationExtensionLockWaiterCount(Relation relation)
Definition: lmgr.c:465
void UnlockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode)
Definition: lmgr.c:605
int LOCKMODE
Definition: lockdefs.h:26
Operator oper(ParseState *pstate, List *opname, Oid ltypeId, Oid rtypeId, bool noError, int location)
Definition: parse_oper.c:370
static char * buf
Definition: pg_test_fsync.c:73
int progress
Definition: pgbench.c:261
unsigned int Oid
Definition: postgres_ext.h:31
Definition: lock.h:165
Definition: pg_list.h:54
Definition: rel.h:39