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-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);
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
86/* Lock VXIDs, specified by conflicting locktags */
87extern void WaitForLockers(LOCKTAG heaplocktag, LOCKMODE lockmode, bool progress);
88extern void WaitForLockersMultiple(List *locktags, LOCKMODE lockmode, bool progress);
89
90/* Lock an XID for tuple insertion (used to wait for an insertion to finish) */
94
95/* Lock a general object (other than a relation) of the current database */
96extern void LockDatabaseObject(Oid classid, Oid objid, uint16 objsubid,
97 LOCKMODE lockmode);
98extern bool ConditionalLockDatabaseObject(Oid classid, Oid objid,
99 uint16 objsubid, LOCKMODE lockmode);
100extern void UnlockDatabaseObject(Oid classid, Oid objid, uint16 objsubid,
101 LOCKMODE lockmode);
102
103/* Lock a shared-across-databases object (other than a relation) */
104extern void LockSharedObject(Oid classid, Oid objid, uint16 objsubid,
105 LOCKMODE lockmode);
106extern bool ConditionalLockSharedObject(Oid classid, Oid objid, uint16 objsubid,
107 LOCKMODE lockmode);
108extern void UnlockSharedObject(Oid classid, Oid objid, uint16 objsubid,
109 LOCKMODE lockmode);
110
111extern void LockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid,
112 LOCKMODE lockmode);
113extern void UnlockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid,
114 LOCKMODE lockmode);
115
116extern void LockApplyTransactionForSession(Oid suboid, TransactionId xid, uint16 objid,
117 LOCKMODE lockmode);
118extern void UnlockApplyTransactionForSession(Oid suboid, TransactionId xid, uint16 objid,
119 LOCKMODE lockmode);
120
121/* Describe a locktag for error messages */
122extern void DescribeLockTag(StringInfo buf, const LOCKTAG *tag);
123
124extern const char *GetLockNameFromTagType(uint16 locktag_type);
125
126#endif /* LMGR_H */
uint32 BlockNumber
Definition: block.h:31
uint16_t uint16
Definition: c.h:487
uint32_t uint32
Definition: c.h:488
uint32 TransactionId
Definition: c.h:609
#define token
Definition: indent_globs.h:126
bool ConditionalLockRelationOid(Oid relid, LOCKMODE lockmode)
Definition: lmgr.c:150
void XactLockTableWait(TransactionId xid, Relation rel, ItemPointer ctid, XLTW_Oper oper)
Definition: lmgr.c:656
void LockSharedObject(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:1072
bool ConditionalLockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode)
Definition: lmgr.c:521
void UnlockRelationOid(Oid relid, LOCKMODE lockmode)
Definition: lmgr.c:226
void LockDatabaseObject(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:993
void UnlockRelation(Relation relation, LOCKMODE lockmode)
Definition: lmgr.c:309
void DescribeLockTag(StringInfo buf, const LOCKTAG *tag)
Definition: lmgr.c:1232
void SpeculativeInsertionWait(TransactionId xid, uint32 token)
Definition: lmgr.c:813
bool ConditionalLockSharedObject(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:1096
void UnlockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:1170
void WaitForLockersMultiple(List *locktags, LOCKMODE lockmode, bool progress)
Definition: lmgr.c:896
void LockRelationIdForSession(LockRelId *relid, LOCKMODE lockmode)
Definition: lmgr.c:386
void RelationInitLockInfo(Relation relation)
Definition: lmgr.c:70
bool ConditionalLockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode)
Definition: lmgr.c:577
void LockRelationOid(Oid relid, LOCKMODE lockmode)
Definition: lmgr.c:107
void LockRelation(Relation relation, LOCKMODE lockmode)
Definition: lmgr.c:243
void UnlockRelationId(LockRelId *relid, LOCKMODE lockmode)
Definition: lmgr.c:211
void WaitForLockers(LOCKTAG heaplocktag, LOCKMODE lockmode, bool progress)
Definition: lmgr.c:974
void XactLockTableDelete(TransactionId xid)
Definition: lmgr.c:632
void LockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode)
Definition: lmgr.c:557
void XactLockTableInsert(TransactionId xid)
Definition: lmgr.c:615
uint32 SpeculativeInsertionLockAcquire(TransactionId xid)
Definition: lmgr.c:771
void LockRelationForExtension(Relation relation, LOCKMODE lockmode)
Definition: lmgr.c:419
bool ConditionalXactLockTableWait(TransactionId xid)
Definition: lmgr.c:729
bool CheckRelationLockedByMe(Relation relation, LOCKMODE lockmode, bool orstronger)
Definition: lmgr.c:329
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:1210
void SpeculativeInsertionLockRelease(TransactionId xid)
Definition: lmgr.c:797
void LockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode)
Definition: lmgr.c:502
bool ConditionalLockRelationForExtension(Relation relation, LOCKMODE lockmode)
Definition: lmgr.c:437
bool CheckRelationOidLockedByMe(Oid relid, LOCKMODE lockmode, bool orstronger)
Definition: lmgr.c:346
void UnlockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode)
Definition: lmgr.c:537
void UnlockRelationIdForSession(LockRelId *relid, LOCKMODE lockmode)
Definition: lmgr.c:399
bool ConditionalLockRelation(Relation relation, LOCKMODE lockmode)
Definition: lmgr.c:274
bool ConditionalLockDatabaseObject(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:1017
void LockDatabaseFrozenIds(LOCKMODE lockmode)
Definition: lmgr.c:486
void UnlockRelationForExtension(Relation relation, LOCKMODE lockmode)
Definition: lmgr.c:469
const char * GetLockNameFromTagType(uint16 locktag_type)
Definition: lmgr.c:1329
void UnlockSharedObject(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:1131
void LockApplyTransactionForSession(Oid suboid, TransactionId xid, uint16 objid, LOCKMODE lockmode)
Definition: lmgr.c:1192
void LockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:1152
void LockRelationId(LockRelId *relid, LOCKMODE lockmode)
Definition: lmgr.c:183
bool LockHasWaitersRelation(Relation relation, LOCKMODE lockmode)
Definition: lmgr.c:362
void UnlockDatabaseObject(Oid classid, Oid objid, uint16 objsubid, LOCKMODE lockmode)
Definition: lmgr.c:1052
int RelationExtensionLockWaiterCount(Relation relation)
Definition: lmgr.c:454
void UnlockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode)
Definition: lmgr.c:594
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:261
unsigned int Oid
Definition: postgres_ext.h:32
Definition: lock.h:165
Definition: pg_list.h:54
Definition: rel.h:39