diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
index 3ace7dfa93..18b39ea0a9 100644
--- a/doc/src/sgml/config.sgml
+++ b/doc/src/sgml/config.sgml
@@ -6217,6 +6217,28 @@ LOG: CleanUpLock: deleting: lock(0xb7acd844) id(24688,24696,0,0,0,1)
+
+ trace_userlocks (boolean)
+
+ trace_userlocks> configuration parameter
+
+
+
+ If on, emit information about user lock usage. Output is the same
+ as for trace_locks, only for user locks.
+
+
+ User locks were removed as of PostgreSQL version 8.2. This option
+ currently has no effect.
+
+
+ This parameter is only available if the LOCK_DEBUG
+ macro was defined when PostgreSQL was
+ compiled.
+
+
+
+
trace_lock_oidmin (integer)
diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c
index ed8344ff8f..905502f145 100644
--- a/src/backend/storage/lmgr/lock.c
+++ b/src/backend/storage/lmgr/lock.c
@@ -213,7 +213,12 @@ static const LockMethodData user_lockmethod = {
AccessExclusiveLock, /* highest valid lock mode number */
true,
LockConflicts,
- lock_mode_names
+ lock_mode_names,
+#ifdef LOCK_DEBUG
+ &Trace_userlocks
+#else
+ &Dummy_trace
+#endif
};
/*
@@ -271,6 +276,7 @@ static ResourceOwner awaitedOwner;
int Trace_lock_oidmin = FirstNormalObjectId;
bool Trace_locks = false;
+bool Trace_userlocks = false;
int Trace_lock_table = 0;
bool Debug_deadlocks = false;
diff --git a/src/backend/utils/misc/check_guc b/src/backend/utils/misc/check_guc
index 91c1c581ac..293fb0363f 100755
--- a/src/backend/utils/misc/check_guc
+++ b/src/backend/utils/misc/check_guc
@@ -20,7 +20,7 @@ INTENTIONALLY_NOT_INCLUDED="autocommit debug_deadlocks \
is_superuser lc_collate lc_ctype lc_messages lc_monetary lc_numeric lc_time \
pre_auth_delay role seed server_encoding server_version server_version_int \
session_authorization trace_lock_oidmin trace_lock_table trace_locks trace_lwlocks \
-trace_notify transaction_isolation transaction_read_only \
+trace_notify trace_userlocks transaction_isolation transaction_read_only \
zero_damaged_pages"
### What options are listed in postgresql.conf.sample, but don't appear
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index a22272c6b7..da7b6d4e90 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -1060,6 +1060,16 @@ static struct config_bool ConfigureNamesBool[] =
false,
NULL, NULL, NULL
},
+ {
+ {"trace_userlocks", PGC_SUSET, DEVELOPER_OPTIONS,
+ gettext_noop("No description available."),
+ NULL,
+ GUC_NOT_IN_SAMPLE
+ },
+ &Trace_userlocks,
+ false,
+ NULL, NULL, NULL
+ },
{
{"trace_lwlocks", PGC_SUSET, DEVELOPER_OPTIONS,
gettext_noop("No description available."),
diff --git a/src/include/storage/lock.h b/src/include/storage/lock.h
index bc746a39e4..e106ad5401 100644
--- a/src/include/storage/lock.h
+++ b/src/include/storage/lock.h
@@ -34,6 +34,7 @@ extern int max_locks_per_xact;
#ifdef LOCK_DEBUG
extern int Trace_lock_oidmin;
extern bool Trace_locks;
+extern bool Trace_userlocks;
extern int Trace_lock_table;
extern bool Debug_deadlocks;
#endif /* LOCK_DEBUG */