1 /*------------------------------------------------------------------------- 2 * 3 * lockdefs.h 4 * Frontend exposed parts of postgres' low level lock mechanism 5 * 6 * The split between lockdefs.h and lock.h is not very principled. This file 7 * contains definition that have to (indirectly) be available when included by 8 * FRONTEND code. 9 * 10 * Portions Copyright (c) 1996-2016, PostgreSQL Global Development Group 11 * Portions Copyright (c) 1994, Regents of the University of California 12 * 13 * src/include/storage/lockdefs.h 14 * 15 *------------------------------------------------------------------------- 16 */ 17 #ifndef LOCKDEFS_H_ 18 #define LOCKDEFS_H_ 19 20 /* 21 * LOCKMODE is an integer (1..N) indicating a lock type. LOCKMASK is a bit 22 * mask indicating a set of held or requested lock types (the bit 1<<mode 23 * corresponds to a particular lock mode). 24 */ 25 typedef int LOCKMASK; 26 typedef int LOCKMODE; 27 28 /* 29 * These are the valid values of type LOCKMODE for all the standard lock 30 * methods (both DEFAULT and USER). 31 */ 32 33 /* NoLock is not a lock mode, but a flag value meaning "don't get a lock" */ 34 #define NoLock 0 35 36 #define AccessShareLock 1 /* SELECT */ 37 #define RowShareLock 2 /* SELECT FOR UPDATE/FOR SHARE */ 38 #define RowExclusiveLock 3 /* INSERT, UPDATE, DELETE */ 39 #define ShareUpdateExclusiveLock 4 /* VACUUM (non-FULL),ANALYZE, CREATE 40 * INDEX CONCURRENTLY */ 41 #define ShareLock 5 /* CREATE INDEX (WITHOUT CONCURRENTLY) */ 42 #define ShareRowExclusiveLock 6 /* like EXCLUSIVE MODE, but allows ROW 43 * SHARE */ 44 #define ExclusiveLock 7 /* blocks ROW SHARE/SELECT...FOR 45 * UPDATE */ 46 #define AccessExclusiveLock 8 /* ALTER TABLE, DROP TABLE, VACUUM 47 * FULL, and unqualified LOCK TABLE */ 48 49 typedef struct xl_standby_lock 50 { 51 TransactionId xid; /* xid of holder of AccessExclusiveLock */ 52 Oid dbOid; 53 Oid relOid; 54 } xl_standby_lock; 55 56 #endif /* LOCKDEF_H_ */ 57