@@ -45,13 +45,15 @@ var (
45
45
"count" ,
46
46
),
47
47
"Number of locks" ,
48
- []string {"datname" , "mode" }, nil ,
48
+ []string {"datname" , "mode" , "usename" , "application_name" }, nil ,
49
49
)
50
50
51
51
pgLocksQuery = `
52
52
SELECT
53
53
pg_database.datname as datname,
54
54
tmp.mode as mode,
55
+ COALESCE(usename, ''),
56
+ COALESCE(application_name, ''),
55
57
COALESCE(count, 0) as count
56
58
FROM
57
59
(
@@ -71,14 +73,18 @@ var (
71
73
SELECT
72
74
database,
73
75
lower(mode) AS mode,
74
- count(*) AS count
75
- FROM
76
- pg_locks
76
+ count(*) AS count,
77
+ usename,
78
+ application_name
79
+ FROM
80
+ pg_locks l JOIN pg_stat_activity a ON a.pid = l.pid
77
81
WHERE
78
82
database IS NOT NULL
79
- GROUP BY
80
- database,
81
- lower(mode)
83
+ GROUP BY
84
+ database,
85
+ lower(mode),
86
+ usename,
87
+ application_name
82
88
) AS tmp2 ON tmp.mode = tmp2.mode
83
89
and pg_database.oid = tmp2.database
84
90
ORDER BY
@@ -99,15 +105,15 @@ func (c PGLocksCollector) Update(ctx context.Context, instance *instance, ch cha
99
105
}
100
106
defer rows .Close ()
101
107
102
- var datname , mode sql.NullString
108
+ var datname , mode , usename , applicationName sql.NullString
103
109
var count sql.NullInt64
104
110
105
111
for rows .Next () {
106
- if err := rows .Scan (& datname , & mode , & count ); err != nil {
112
+ if err := rows .Scan (& datname , & mode , & usename , & applicationName , & count ); err != nil {
107
113
return err
108
114
}
109
115
110
- if ! datname .Valid || ! mode .Valid {
116
+ if ! datname .Valid || ! mode .Valid || ! usename . Valid || ! applicationName . Valid {
111
117
continue
112
118
}
113
119
@@ -119,7 +125,7 @@ func (c PGLocksCollector) Update(ctx context.Context, instance *instance, ch cha
119
125
ch <- prometheus .MustNewConstMetric (
120
126
pgLocksDesc ,
121
127
prometheus .GaugeValue , countMetric ,
122
- datname .String , mode .String ,
128
+ datname .String , mode .String , usename . String , applicationName . String ,
123
129
)
124
130
}
125
131
if err := rows .Err (); err != nil {
0 commit comments