@@ -150,6 +150,12 @@ var (
150150 []string {"datname" , "schemaname" , "relname" },
151151 prometheus.Labels {},
152152 )
153+ statUserTablesTotalSize = prometheus .NewDesc (
154+ prometheus .BuildFQName (namespace , userTableSubsystem , "size_bytes" ),
155+ "Total disk space used by this table, in bytes, including all indexes and TOAST data" ,
156+ []string {"datname" , "schemaname" , "relname" },
157+ prometheus.Labels {},
158+ )
153159
154160 statUserTablesQuery = `SELECT
155161 current_database() datname,
@@ -173,7 +179,8 @@ var (
173179 vacuum_count,
174180 autovacuum_count,
175181 analyze_count,
176- autoanalyze_count
182+ autoanalyze_count,
183+ pg_total_relation_size(relid) as total_size
177184 FROM
178185 pg_stat_user_tables`
179186)
@@ -191,10 +198,10 @@ func (c *PGStatUserTablesCollector) Update(ctx context.Context, instance *instan
191198 for rows .Next () {
192199 var datname , schemaname , relname sql.NullString
193200 var seqScan , seqTupRead , idxScan , idxTupFetch , nTupIns , nTupUpd , nTupDel , nTupHotUpd , nLiveTup , nDeadTup ,
194- nModSinceAnalyze , vacuumCount , autovacuumCount , analyzeCount , autoanalyzeCount sql.NullInt64
201+ nModSinceAnalyze , vacuumCount , autovacuumCount , analyzeCount , autoanalyzeCount , totalSize sql.NullInt64
195202 var lastVacuum , lastAutovacuum , lastAnalyze , lastAutoanalyze sql.NullTime
196203
197- if err := rows .Scan (& datname , & schemaname , & relname , & seqScan , & seqTupRead , & idxScan , & idxTupFetch , & nTupIns , & nTupUpd , & nTupDel , & nTupHotUpd , & nLiveTup , & nDeadTup , & nModSinceAnalyze , & lastVacuum , & lastAutovacuum , & lastAnalyze , & lastAutoanalyze , & vacuumCount , & autovacuumCount , & analyzeCount , & autoanalyzeCount ); err != nil {
204+ if err := rows .Scan (& datname , & schemaname , & relname , & seqScan , & seqTupRead , & idxScan , & idxTupFetch , & nTupIns , & nTupUpd , & nTupDel , & nTupHotUpd , & nLiveTup , & nDeadTup , & nModSinceAnalyze , & lastVacuum , & lastAutovacuum , & lastAnalyze , & lastAutoanalyze , & vacuumCount , & autovacuumCount , & analyzeCount , & autoanalyzeCount , & totalSize ); err != nil {
198205 return err
199206 }
200207
@@ -419,6 +426,17 @@ func (c *PGStatUserTablesCollector) Update(ctx context.Context, instance *instan
419426 autoanalyzeCountMetric ,
420427 datnameLabel , schemanameLabel , relnameLabel ,
421428 )
429+
430+ totalSizeMetric := 0.0
431+ if totalSize .Valid {
432+ totalSizeMetric = float64 (totalSize .Int64 )
433+ }
434+ ch <- prometheus .MustNewConstMetric (
435+ statUserTablesTotalSize ,
436+ prometheus .GaugeValue ,
437+ totalSizeMetric ,
438+ datnameLabel , schemanameLabel , relnameLabel ,
439+ )
422440 }
423441
424442 if err := rows .Err (); err != nil {
0 commit comments