2
0

lmgr.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. /*-------------------------------------------------------------------------
  2. *
  3. * lmgr.h
  4. * POSTGRES lock manager definitions.
  5. *
  6. *
  7. * Portions Copyright (c) 1996-2022, 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. #include "lib/stringinfo.h"
  17. #include "storage/itemptr.h"
  18. #include "storage/lock.h"
  19. #include "utils/rel.h"
  20. /* XactLockTableWait operations */
  21. typedef enum XLTW_Oper
  22. {
  23. XLTW_None,
  24. XLTW_Update,
  25. XLTW_Delete,
  26. XLTW_Lock,
  27. XLTW_LockUpdated,
  28. XLTW_InsertIndex,
  29. XLTW_InsertIndexUnique,
  30. XLTW_FetchUpdated,
  31. XLTW_RecheckExclusionConstr
  32. } XLTW_Oper;
  33. extern void RelationInitLockInfo(Relation relation);
  34. /* Lock a relation */
  35. extern void LockRelationOid(Oid relid, LOCKMODE lockmode);
  36. extern void LockRelationId(LockRelId *relid, LOCKMODE lockmode);
  37. extern bool ConditionalLockRelationOid(Oid relid, LOCKMODE lockmode);
  38. extern void UnlockRelationId(LockRelId *relid, LOCKMODE lockmode);
  39. extern void UnlockRelationOid(Oid relid, LOCKMODE lockmode);
  40. extern void LockRelation(Relation relation, LOCKMODE lockmode);
  41. extern bool ConditionalLockRelation(Relation relation, LOCKMODE lockmode);
  42. extern void UnlockRelation(Relation relation, LOCKMODE lockmode);
  43. extern bool CheckRelationLockedByMe(Relation relation, LOCKMODE lockmode,
  44. bool orstronger);
  45. extern bool LockHasWaitersRelation(Relation relation, LOCKMODE lockmode);
  46. extern void LockRelationIdForSession(LockRelId *relid, LOCKMODE lockmode);
  47. extern void UnlockRelationIdForSession(LockRelId *relid, LOCKMODE lockmode);
  48. /* Lock a relation for extension */
  49. extern void LockRelationForExtension(Relation relation, LOCKMODE lockmode);
  50. extern void UnlockRelationForExtension(Relation relation, LOCKMODE lockmode);
  51. extern bool ConditionalLockRelationForExtension(Relation relation,
  52. LOCKMODE lockmode);
  53. extern int RelationExtensionLockWaiterCount(Relation relation);
  54. /* Lock to recompute pg_database.datfrozenxid in the current database */
  55. extern void LockDatabaseFrozenIds(LOCKMODE lockmode);
  56. /* Lock a page (currently only used within indexes) */
  57. extern void LockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode);
  58. extern bool ConditionalLockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode);
  59. extern void UnlockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode);
  60. /* Lock a tuple (see heap_lock_tuple before assuming you understand this) */
  61. extern void LockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode);
  62. extern bool ConditionalLockTuple(Relation relation, ItemPointer tid,
  63. LOCKMODE lockmode);
  64. extern void UnlockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode);
  65. /* Lock an XID (used to wait for a transaction to finish) */
  66. extern void XactLockTableInsert(TransactionId xid);
  67. extern void XactLockTableDelete(TransactionId xid);
  68. extern void XactLockTableWait(TransactionId xid, Relation rel,
  69. ItemPointer ctid, XLTW_Oper oper);
  70. extern bool ConditionalXactLockTableWait(TransactionId xid);
  71. /* Lock VXIDs, specified by conflicting locktags */
  72. extern void WaitForLockers(LOCKTAG heaplocktag, LOCKMODE lockmode, bool progress);
  73. extern void WaitForLockersMultiple(List *locktags, LOCKMODE lockmode, bool progress);
  74. /* Lock an XID for tuple insertion (used to wait for an insertion to finish) */
  75. extern uint32 SpeculativeInsertionLockAcquire(TransactionId xid);
  76. extern void SpeculativeInsertionLockRelease(TransactionId xid);
  77. extern void SpeculativeInsertionWait(TransactionId xid, uint32 token);
  78. /* Lock a general object (other than a relation) of the current database */
  79. extern void LockDatabaseObject(Oid classid, Oid objid, uint16 objsubid,
  80. LOCKMODE lockmode);
  81. extern void UnlockDatabaseObject(Oid classid, Oid objid, uint16 objsubid,
  82. LOCKMODE lockmode);
  83. /* Lock a shared-across-databases object (other than a relation) */
  84. extern void LockSharedObject(Oid classid, Oid objid, uint16 objsubid,
  85. LOCKMODE lockmode);
  86. extern void UnlockSharedObject(Oid classid, Oid objid, uint16 objsubid,
  87. LOCKMODE lockmode);
  88. extern void LockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid,
  89. LOCKMODE lockmode);
  90. extern void UnlockSharedObjectForSession(Oid classid, Oid objid, uint16 objsubid,
  91. LOCKMODE lockmode);
  92. /* Describe a locktag for error messages */
  93. extern void DescribeLockTag(StringInfo buf, const LOCKTAG *tag);
  94. extern const char *GetLockNameFromTagType(uint16 locktag_type);
  95. #endif /* LMGR_H */