@@ -156,6 +156,12 @@ var (
156156 []string {"datname" , "schemaname" , "relname" },
157157 prometheus.Labels {},
158158 )
159+ statUserTablesOnlySize = prometheus .NewDesc (
160+ prometheus .BuildFQName (namespace , userTableSubsystem , "only_size_bytes" ),
161+ "Total disk space used by only this table, in bytes" ,
162+ []string {"datname" , "schemaname" , "relname" },
163+ prometheus.Labels {},
164+ )
159165
160166 statUserTablesQuery = `SELECT
161167 current_database() datname,
@@ -180,7 +186,8 @@ var (
180186 autovacuum_count,
181187 analyze_count,
182188 autoanalyze_count,
183- pg_total_relation_size(relid) as total_size
189+ pg_total_relation_size(relid) as total_size,
190+ pg_table_size(relid) as table_only_size
184191 FROM
185192 pg_stat_user_tables`
186193)
@@ -198,10 +205,10 @@ func (c *PGStatUserTablesCollector) Update(ctx context.Context, instance *instan
198205 for rows .Next () {
199206 var datname , schemaname , relname sql.NullString
200207 var seqScan , seqTupRead , idxScan , idxTupFetch , nTupIns , nTupUpd , nTupDel , nTupHotUpd , nLiveTup , nDeadTup ,
201- nModSinceAnalyze , vacuumCount , autovacuumCount , analyzeCount , autoanalyzeCount , totalSize sql.NullInt64
208+ nModSinceAnalyze , vacuumCount , autovacuumCount , analyzeCount , autoanalyzeCount , totalSize , tableOnlySize sql.NullInt64
202209 var lastVacuum , lastAutovacuum , lastAnalyze , lastAutoanalyze sql.NullTime
203210
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 {
211+ 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 , & tableOnlySize ); err != nil {
205212 return err
206213 }
207214
@@ -437,6 +444,17 @@ func (c *PGStatUserTablesCollector) Update(ctx context.Context, instance *instan
437444 totalSizeMetric ,
438445 datnameLabel , schemanameLabel , relnameLabel ,
439446 )
447+
448+ tableOnlySizeMetric := 0.0
449+ if tableOnlySize .Valid {
450+ tableOnlySizeMetric = float64 (tableOnlySize .Int64 )
451+ }
452+ ch <- prometheus .MustNewConstMetric (
453+ statUserTablesOnlySize ,
454+ prometheus .GaugeValue ,
455+ tableOnlySizeMetric ,
456+ datnameLabel , schemanameLabel , relnameLabel ,
457+ )
440458 }
441459
442460 if err := rows .Err (); err != nil {
0 commit comments