master
go 55 lines 1.08 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package postgres
4
5 import "database/sql"
6
7 func (c *Collector) doQueryColumns() error {
8 if err := c.doDBQueryColumns(c.db); err != nil {
9 c.Warning(err)
10 }
11 for _, conn := range c.dbConns {
12 if conn.db == nil {
13 continue
14 }
15 if err := c.doDBQueryColumns(conn.db); err != nil {
16 c.Warning(err)
17 }
18 }
19 return nil
20 }
21
22 func (c *Collector) doDBQueryColumns(db *sql.DB) error {
23 q := queryColumnsStats()
24
25 for _, m := range c.mx.tables {
26 if m.nullColumns != nil {
27 m.nullColumns = new(int64(0))
28 }
29 }
30
31 var dbname, schema, table string
32 var nullPerc int64
33 return c.doDBQuery(db, q, func(column, value string, rowEnd bool) {
34 switch column {
35 case "datname":
36 dbname = value
37 case "schemaname":
38 schema = value
39 case "relname":
40 table = value
41 case "null_percent":
42 nullPerc = parseInt(value)
43 }
44 if !rowEnd {
45 return
46 }
47 if nullPerc == 100 && c.hasTableMetrics(table, dbname, schema) {
48 v := c.getTableMetrics(table, dbname, schema)
49 if v.nullColumns == nil {
50 v.nullColumns = new(int64(0))
51 }
52 *v.nullColumns++
53 }
54 })
55 }