scanPgStatActivityRow scans a full pg_stat_activity row into a map. All 21 columns are always returned regardless of the SELECT column list, so we must scan all of them.
(rows *sql.Rows)
| 13 | // All 21 columns are always returned regardless of the SELECT column list, |
| 14 | // so we must scan all of them. |
| 15 | func scanPgStatActivityRow(rows *sql.Rows) (map[string]interface{}, error) { |
| 16 | var ( |
| 17 | datid, pid, usesysid, clientPort, workerID int |
| 18 | datname, usename, appName, clientAddr, state, query string |
| 19 | backendType string |
| 20 | backendStart time.Time |
| 21 | xactStart, queryStart, stateChange sql.NullTime |
| 22 | waitEventType, waitEvent sql.NullString |
| 23 | backendXid, backendXmin, leaderPid sql.NullInt32 |
| 24 | queryProgress float64 |
| 25 | rowsProcessed, totalRowsToProcess int64 |
| 26 | ) |
| 27 | |
| 28 | err := rows.Scan( |
| 29 | &datid, &datname, &pid, &usesysid, &usename, |
| 30 | &appName, &clientAddr, &clientPort, |
| 31 | &backendStart, &xactStart, &queryStart, &stateChange, |
| 32 | &waitEventType, &waitEvent, &state, |
| 33 | &backendXid, &backendXmin, &query, |
| 34 | &backendType, &leaderPid, &workerID, |
| 35 | &queryProgress, &rowsProcessed, &totalRowsToProcess, |
| 36 | ) |
| 37 | if err != nil { |
| 38 | return nil, err |
| 39 | } |
| 40 | |
| 41 | return map[string]interface{}{ |
| 42 | "datid": datid, |
| 43 | "datname": datname, |
| 44 | "pid": pid, |
| 45 | "usesysid": usesysid, |
| 46 | "usename": usename, |
| 47 | "application_name": appName, |
| 48 | "client_addr": clientAddr, |
| 49 | "client_port": clientPort, |
| 50 | "backend_start": backendStart, |
| 51 | "xact_start": xactStart, |
| 52 | "query_start": queryStart, |
| 53 | "state_change": stateChange, |
| 54 | "wait_event_type": waitEventType, |
| 55 | "wait_event": waitEvent, |
| 56 | "state": state, |
| 57 | "backend_xid": backendXid, |
| 58 | "backend_xmin": backendXmin, |
| 59 | "query": query, |
| 60 | "backend_type": backendType, |
| 61 | "leader_pid": leaderPid, |
| 62 | "worker_id": workerID, |
| 63 | "query_progress": queryProgress, |
| 64 | "rows_processed": rowsProcessed, |
| 65 | "total_rows_to_process": totalRowsToProcess, |
| 66 | }, nil |
| 67 | } |
| 68 | |
| 69 | // queryPgStatActivity returns all rows from pg_stat_activity as maps. |
| 70 | func queryPgStatActivity(db *sql.DB) ([]map[string]interface{}, error) { |
no test coverage detected