github.com/netdata/go.d.plugin@v0.58.1/modules/postgres/do_query_columns.go (about)

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package postgres
     4  
     5  import "database/sql"
     6  
     7  func (p *Postgres) doQueryColumns() error {
     8  	if err := p.doDBQueryColumns(p.db); err != nil {
     9  		p.Warning(err)
    10  	}
    11  	for _, conn := range p.dbConns {
    12  		if conn.db == nil {
    13  			continue
    14  		}
    15  		if err := p.doDBQueryColumns(conn.db); err != nil {
    16  			p.Warning(err)
    17  		}
    18  	}
    19  	return nil
    20  }
    21  
    22  func (p *Postgres) doDBQueryColumns(db *sql.DB) error {
    23  	q := queryColumnsStats()
    24  
    25  	for _, m := range p.mx.tables {
    26  		if m.nullColumns != nil {
    27  			m.nullColumns = newInt(0)
    28  		}
    29  	}
    30  
    31  	var dbname, schema, table string
    32  	var nullPerc int64
    33  	return p.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 && p.hasTableMetrics(table, dbname, schema) {
    48  			v := p.getTableMetrics(table, dbname, schema)
    49  			if v.nullColumns == nil {
    50  				v.nullColumns = newInt(0)
    51  			}
    52  			*v.nullColumns++
    53  		}
    54  	})
    55  }