1996-08-28 01:59:28 +00:00
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
*
|
1999-02-13 23:22:53 +00:00
|
|
|
* lmgr.h
|
1997-09-07 05:04:48 +00:00
|
|
|
* POSTGRES lock manager definitions.
|
1996-08-28 01:59:28 +00:00
|
|
|
*
|
|
|
|
*
|
2006-03-05 15:59:11 +00:00
|
|
|
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
2000-01-26 05:58:53 +00:00
|
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
1996-08-28 01:59:28 +00:00
|
|
|
*
|
2006-07-31 20:09:10 +00:00
|
|
|
* $PostgreSQL: pgsql/src/include/storage/lmgr.h,v 1.55 2006/07/31 20:09:05 tgl Exp $
|
1996-08-28 01:59:28 +00:00
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
1997-09-07 05:04:48 +00:00
|
|
|
#ifndef LMGR_H
|
1996-08-28 01:59:28 +00:00
|
|
|
#define LMGR_H
|
|
|
|
|
1999-07-15 23:04:24 +00:00
|
|
|
#include "storage/lock.h"
|
|
|
|
#include "utils/rel.h"
|
1996-08-28 01:59:28 +00:00
|
|
|
|
2005-04-30 19:03:33 +00:00
|
|
|
|
1997-09-08 02:41:22 +00:00
|
|
|
extern void RelationInitLockInfo(Relation relation);
|
1996-08-28 01:59:28 +00:00
|
|
|
|
2000-12-22 00:51:54 +00:00
|
|
|
/* Lock a relation */
|
2006-07-31 20:09:10 +00:00
|
|
|
extern void LockRelationOid(Oid relid, LOCKMODE lockmode);
|
|
|
|
extern bool ConditionalLockRelationOid(Oid relid, LOCKMODE lockmode);
|
|
|
|
extern void UnlockRelationId(LockRelId *relid, LOCKMODE lockmode);
|
|
|
|
|
1998-12-15 12:47:01 +00:00
|
|
|
extern void LockRelation(Relation relation, LOCKMODE lockmode);
|
2001-06-22 00:04:59 +00:00
|
|
|
extern bool ConditionalLockRelation(Relation relation, LOCKMODE lockmode);
|
1998-12-15 12:47:01 +00:00
|
|
|
extern void UnlockRelation(Relation relation, LOCKMODE lockmode);
|
1996-08-28 01:59:28 +00:00
|
|
|
|
2006-07-31 20:09:10 +00:00
|
|
|
extern void LockRelationIdForSession(LockRelId *relid, LOCKMODE lockmode);
|
|
|
|
extern void UnlockRelationIdForSession(LockRelId *relid, LOCKMODE lockmode);
|
2000-12-22 00:51:54 +00:00
|
|
|
|
2005-04-29 22:28:24 +00:00
|
|
|
/* Lock a relation for extension */
|
|
|
|
extern void LockRelationForExtension(Relation relation, LOCKMODE lockmode);
|
|
|
|
extern void UnlockRelationForExtension(Relation relation, LOCKMODE lockmode);
|
|
|
|
|
|
|
|
/* Lock a page (currently only used within indexes) */
|
1998-12-15 12:47:01 +00:00
|
|
|
extern void LockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode);
|
2003-09-04 22:06:27 +00:00
|
|
|
extern bool ConditionalLockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode);
|
1998-12-15 12:47:01 +00:00
|
|
|
extern void UnlockPage(Relation relation, BlockNumber blkno, LOCKMODE lockmode);
|
1996-08-28 01:59:28 +00:00
|
|
|
|
2005-04-30 19:03:33 +00:00
|
|
|
/* Lock a tuple (see heap_lock_tuple before assuming you understand this) */
|
|
|
|
extern void LockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode);
|
2005-08-01 20:31:16 +00:00
|
|
|
extern bool ConditionalLockTuple(Relation relation, ItemPointer tid,
|
2005-10-15 02:49:52 +00:00
|
|
|
LOCKMODE lockmode);
|
2005-04-30 19:03:33 +00:00
|
|
|
extern void UnlockTuple(Relation relation, ItemPointer tid, LOCKMODE lockmode);
|
|
|
|
|
2000-12-22 00:51:54 +00:00
|
|
|
/* Lock an XID (used to wait for a transaction to finish) */
|
1998-12-15 12:47:01 +00:00
|
|
|
extern void XactLockTableInsert(TransactionId xid);
|
2004-09-16 16:58:44 +00:00
|
|
|
extern void XactLockTableDelete(TransactionId xid);
|
1998-12-15 12:47:01 +00:00
|
|
|
extern void XactLockTableWait(TransactionId xid);
|
2005-08-01 20:31:16 +00:00
|
|
|
extern bool ConditionalXactLockTableWait(TransactionId xid);
|
2001-10-28 06:26:15 +00:00
|
|
|
|
2005-04-30 19:03:33 +00:00
|
|
|
/* Lock a general object (other than a relation) of the current database */
|
|
|
|
extern void LockDatabaseObject(Oid classid, Oid objid, uint16 objsubid,
|
2005-10-15 02:49:52 +00:00
|
|
|
LOCKMODE lockmode);
|
2005-04-30 19:03:33 +00:00
|
|
|
extern void UnlockDatabaseObject(Oid classid, Oid objid, uint16 objsubid,
|
2005-10-15 02:49:52 +00:00
|
|
|
LOCKMODE lockmode);
|
2005-04-30 19:03:33 +00:00
|
|
|
|
|
|
|
/* Lock a shared-across-databases object (other than a relation) */
|
|
|
|
extern void LockSharedObject(Oid classid, Oid objid, uint16 objsubid,
|
2005-10-15 02:49:52 +00:00
|
|
|
LOCKMODE lockmode);
|
2005-04-30 19:03:33 +00:00
|
|
|
extern void UnlockSharedObject(Oid classid, Oid objid, uint16 objsubid,
|
2005-10-15 02:49:52 +00:00
|
|
|
LOCKMODE lockmode);
|
2005-04-30 19:03:33 +00:00
|
|
|
|
2006-07-31 20:09:10 +00:00
|
|
|
/* Knowledge about which locktags describe temp objects */
|
|
|
|
extern bool LockTagIsTemp(const LOCKTAG *tag);
|
|
|
|
|
2001-11-05 17:46:40 +00:00
|
|
|
#endif /* LMGR_H */
|