PostgreSQL Source Code git master
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
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-2025, 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 */
24typedef enum XLTW_Oper
25{
36
37extern void RelationInitLockInfo(Relation relation);
38
39/* Lock a relation */
40extern void LockRelationOid(Oid relid, LOCKMODE lockmode);
41extern void LockRelationId(LockRelId *relid, LOCKMODE lockmode);
42extern bool ConditionalLockRelationOid(Oid relid, LOCKMODE lockmode);
43extern void UnlockRelationId(LockRelId *relid, LOCKMODE lockmode);
44extern void UnlockRelationOid(Oid relid, LOCKMODE lockmode);
45
46extern void LockRelation(Relation relation, LOCKMODE lockmode);
47extern bool ConditionalLockRelation(Relation relation, LOCKMODE lockmode);
48extern void UnlockRelation(Relation relation, LOCKMODE lockmode);
49extern bool CheckRelationLockedByMe(Relation relation, LOCKMODE lockmode,
50 bool orstronger);
51extern bool CheckRelationOidLockedByMe(Oid relid, LOCKMODE lockmode,
52 bool orstronger);
53extern bool LockHasWaitersRelation(Relation relation, LOCKMODE lockmode);
54
55extern void LockRelationIdForSession(LockRelId *relid, LOCKMODE lockmode);
56extern void UnlockRelationIdForSession(LockRelId *relid, LOCKMODE lockmode);
57
58/* Lock a relation for extension */
59extern void LockRelationForExtension(Relation relation, LOCKMODE lockmode);
60extern void UnlockRelationForExtension(Relation relation, LOCKMODE lockmode);
62 LOCKMODE lockmode);
64
65/* Lock to recompute pg_database.datfrozenxid in the current database */
66extern void LockDatabaseFrozenIds(LOCKMODE lockmode);
67
68/* Lock a page (currently only used within indexes) */
69extern void LockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode);
70extern bool ConditionalLockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode);
71extern void UnlockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode);
72
73/* Lock a tuple (see heap_lock_tuple before assuming you understand this) */
74extern void LockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode);
75extern bool ConditionalLockTuple(Relation relation, ItemPointer tid,
76 LOCKMODE lockmode, bool logLockFailure);
77extern void UnlockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode);
78
79/* Lock an XID (used to wait for a transaction to finish) */
80extern void XactLockTableInsert(TransactionId xid);
81extern void XactLockTableDelete(TransactionId xid);
82extern void XactLockTableWait(TransactionId xid, Relation rel,
85 bool logLockFailure);
86
87/* Lock VXIDs, specified by conflicting locktags */
88extern void WaitForLockers(LOCKTAG heaplocktag, LOCKMODE lockmode, bool progress);
89extern void WaitForLockersMultiple(List *locktags, LOCKMODE lockmode, bool progress);
90
91/* Lock an XID for tuple insertion (used to wait for an insertion to finish) */
95
96/* Lock a general object (other than a relation) of the current database */
97extern void LockDatabaseObject(Oid classid, Oid objid, uint16 objsubid,
98 LOCKMODE lockmode);
99extern bool ConditionalLockDatabaseObject(Oid classid, Oid objid,
100 uint16 objsubid, LOCKMODE lockmode);
101extern void UnlockDatabaseObject(Oid classid, Oid objid, uint16 objsubid,
102 LOCKMODE lockmode);
103
104/* Lock a shared-across-databases object (other than a relation) */
105extern void LockSharedObject(Oid classid, Oid objid, uint16 objsubid,
106 LOCKMODE lockmode);
107extern bool ConditionalLockSharedObject(Oid classid, Oid objid, uint16 objsubid,
108 LOCKMODE lockmode);
109extern void UnlockSharedObject(Oid classid, Oid objid, uint16 objsubid,
110 LOCKMODE lockmode);
111
112extern void LockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid,
113 LOCKMODE lockmode);
114extern void UnlockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid,
115 LOCKMODE lockmode);
116
117extern void LockApplyTransactionForSession(Oid suboid, TransactionId xid, uint16 objid,
118 LOCKMODE lockmode);
119extern void UnlockApplyTransactionForSession(Oid suboid, TransactionId xid, uint16 objid,
120 LOCKMODE lockmode);
121
122/* Describe a locktag for error messages */
123extern void DescribeLockTag(StringInfo buf, const LOCKTAG *tag);
124
125extern const char *GetLockNameFromTagType(uint16 locktag_type);
126
127#endif /* LMGR_H */
uint32 BlockNumber
Definition: block.h:31
uint16_t uint16
Definition: c.h:501
uint32_t uint32
Definition: c.h:502
uint32 TransactionId
Definition: c.h:623
bool ConditionalLockRelationOid(Oid relid, LOCKMODE lockmode)
Definition: lmgr.c:151
void XactLockTableWait(TransactionId xid, Relation rel, ItemPointer ctid, XLTW_Oper oper)
Definition: lmgr.c:663
void LockSharedObject(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:1082
bool ConditionalLockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode, bool logLockFailure)
Definition: lmgr.c:582
bool ConditionalLockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode)
Definition: lmgr.c:526
void UnlockRelationOid(Oid relid, LOCKMODE lockmode)
Definition: lmgr.c:229
void LockDatabaseObject(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:1002
void UnlockRelation(Relation relation, LOCKMODE lockmode)
Definition: lmgr.c:314
void DescribeLockTag(StringInfo buf, const LOCKTAG *tag)
Definition: lmgr.c:1243
void SpeculativeInsertionWait(TransactionId xid, uint32 token)
Definition: lmgr.c:822
bool ConditionalLockSharedObject(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:1106
void UnlockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:1181
void WaitForLockersMultiple(List *locktags, LOCKMODE lockmode, bool progress)
Definition: lmgr.c:905
void LockRelationIdForSession(LockRelId *relid, LOCKMODE lockmode)
Definition: lmgr.c:391
void RelationInitLockInfo(Relation relation)
Definition: lmgr.c:70
void LockRelationOid(Oid relid, LOCKMODE lockmode)
Definition: lmgr.c:107
void LockRelation(Relation relation, LOCKMODE lockmode)
Definition: lmgr.c:246
void UnlockRelationId(LockRelId *relid, LOCKMODE lockmode)
Definition: lmgr.c:214
void WaitForLockers(LOCKTAG heaplocktag, LOCKMODE lockmode, bool progress)
Definition: lmgr.c:983
bool ConditionalXactLockTableWait(TransactionId xid, bool logLockFailure)
Definition: lmgr.c:736
void XactLockTableDelete(TransactionId xid)
Definition: lmgr.c:639
void LockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode)
Definition: lmgr.c:562
void XactLockTableInsert(TransactionId xid)
Definition: lmgr.c:622
uint32 SpeculativeInsertionLockAcquire(TransactionId xid)
Definition: lmgr.c:780
void LockRelationForExtension(Relation relation, LOCKMODE lockmode)
Definition: lmgr.c:424
bool CheckRelationLockedByMe(Relation relation, LOCKMODE lockmode, bool orstronger)
Definition: lmgr.c:334
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:1221
void SpeculativeInsertionLockRelease(TransactionId xid)
Definition: lmgr.c:806
void LockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode)
Definition: lmgr.c:507
bool ConditionalLockRelationForExtension(Relation relation, LOCKMODE lockmode)
Definition: lmgr.c:442
bool CheckRelationOidLockedByMe(Oid relid, LOCKMODE lockmode, bool orstronger)
Definition: lmgr.c:351
void UnlockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode)
Definition: lmgr.c:542
void UnlockRelationIdForSession(LockRelId *relid, LOCKMODE lockmode)
Definition: lmgr.c:404
bool ConditionalLockRelation(Relation relation, LOCKMODE lockmode)
Definition: lmgr.c:278
bool ConditionalLockDatabaseObject(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:1026
void LockDatabaseFrozenIds(LOCKMODE lockmode)
Definition: lmgr.c:491
void UnlockRelationForExtension(Relation relation, LOCKMODE lockmode)
Definition: lmgr.c:474
const char * GetLockNameFromTagType(uint16 locktag_type)
Definition: lmgr.c:1340
void UnlockSharedObject(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:1142
void LockApplyTransactionForSession(Oid suboid, TransactionId xid, uint16 objid, LOCKMODE lockmode)
Definition: lmgr.c:1203
void LockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:1163
void LockRelationId(LockRelId *relid, LOCKMODE lockmode)
Definition: lmgr.c:185
bool LockHasWaitersRelation(Relation relation, LOCKMODE lockmode)
Definition: lmgr.c:367
void UnlockDatabaseObject(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:1062
int RelationExtensionLockWaiterCount(Relation relation)
Definition: lmgr.c:459
void UnlockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode)
Definition: lmgr.c:601
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:72
static int progress
Definition: pgbench.c:262
unsigned int Oid
Definition: postgres_ext.h:30
Definition: lock.h:166
Definition: pg_list.h:54
Definition: rel.h:39