@@ -31,8 +31,9 @@ import (
3131 "strings"
3232 "time"
3333
34+ "github.com/jackc/pgx/v5/pgtype"
35+ _ "github.com/jackc/pgx/v5/stdlib"
3436 "github.com/rapidloop/pgmetrics"
35- "github.com/rapidloop/pq"
3637 "golang.org/x/mod/semver"
3738)
3839
@@ -234,7 +235,7 @@ func Collect(o CollectConfig, dbnames []string) *pgmetrics.Model {
234235
235236func getConn (connstr string , o CollectConfig ) * sql.DB {
236237 // connect
237- db , err := sql .Open ("postgres " , connstr )
238+ db , err := sql .Open ("pgx " , connstr )
238239 if err != nil {
239240 log .Fatal (err )
240241 }
@@ -848,7 +849,7 @@ func (c *collector) getWalReceiverv13() {
848849 q = strings .Replace (q , "@sender_host@" , `''` , 1 )
849850 }
850851 var r pgmetrics.ReplicationIn
851- var msgSend , msgRecv pq .NullTime
852+ var msgSend , msgRecv sql .NullTime
852853 if err := c .db .QueryRowContext (ctx , q ).Scan (& r .Status , & r .ReceiveStartLSN ,
853854 & r .ReceiveStartTLI , & r .WrittenLSN , & r .FlushedLSN , & r .ReceivedTLI ,
854855 & msgSend , & msgRecv , & r .LatestEndLSN , & r .LatestEndTime , & r .SlotName ,
@@ -889,7 +890,7 @@ func (c *collector) getWalReceiverv96() {
889890 COALESCE(slot_name, ''), conninfo
890891 FROM pg_stat_wal_receiver`
891892 var r pgmetrics.ReplicationIn
892- var msgSend , msgRecv pq .NullTime
893+ var msgSend , msgRecv sql .NullTime
893894 if err := c .db .QueryRowContext (ctx , q ).Scan (& r .Status , & r .ReceiveStartLSN , & r .ReceiveStartTLI ,
894895 & r .ReceivedLSN , & r .ReceivedTLI , & msgSend , & msgRecv ,
895896 & r .LatestEndLSN , & r .LatestEndTime , & r .SlotName , & r .Conninfo ); err != nil {
@@ -1327,7 +1328,7 @@ func (c *collector) getDatabases(fillSize, onlyListed bool, dbList []string) {
13271328 if onlyListed {
13281329 if len (dbList ) > 0 {
13291330 onlyClause = "AND (D.datname = any($1))"
1330- args = append (args , pq .Array (dbList ) )
1331+ args = append (args , & dbList ) // was pq.Array(& dbList)
13311332 } else {
13321333 onlyClause = "AND (D.datname = current_database())"
13331334 }
@@ -1753,13 +1754,14 @@ func (c *collector) getRoles() {
17531754 }
17541755 defer rows .Close ()
17551756
1757+ m := pgtype .NewMap ()
17561758 for rows .Next () {
17571759 var r pgmetrics.Role
17581760 var validUntil float64
17591761 if err := rows .Scan (& r .OID , & r .Name , & r .Rolsuper , & r .Rolinherit ,
17601762 & r .Rolcreaterole , & r .Rolcreatedb , & r .Rolcanlogin , & r .Rolreplication ,
17611763 & r .Rolbypassrls , & r .Rolconnlimit , & validUntil ,
1762- pq . Array (& r .MemberOf )); err != nil {
1764+ m . SQLScanner (& r .MemberOf )); err != nil { // was pq.Array(&r.MemberOf)
17631765 log .Fatalf ("pg_roles/pg_auth_members query failed: %v" , err )
17641766 }
17651767 if ! math .IsInf (validUntil , 0 ) {
@@ -2205,18 +2207,15 @@ SELECT pid, pg_blocking_pids(pid) FROM P`
22052207 }
22062208 defer rows .Close ()
22072209
2210+ m := pgtype .NewMap ()
22082211 c .result .BlockingPIDs = make (map [int ][]int )
22092212 for rows .Next () {
22102213 var pid int
2211- var blockers []int64 // lib/pq doesn't support [] int :-(
2212- if err := rows .Scan (& pid , pq . Array (& blockers )); err != nil {
2214+ var blockers []int
2215+ if err := rows .Scan (& pid , m . SQLScanner (& blockers )); err != nil { // was pq.Array(&blockersInt64)
22132216 log .Fatalf ("pg_locks query failed: %v" , err )
22142217 }
2215- blockersInt := make ([]int , len (blockers ))
2216- for i := range blockers {
2217- blockersInt [i ] = int (blockers [i ])
2218- }
2219- c .result .BlockingPIDs [pid ] = blockersInt
2218+ c .result .BlockingPIDs [pid ] = blockers
22202219 }
22212220 if err := rows .Err (); err != nil {
22222221 log .Fatalf ("pg_locks query failed: %v" , err )
@@ -2347,7 +2346,7 @@ func (c *collector) getSubscriptions() {
23472346
23482347 for rows .Next () {
23492348 var s pgmetrics.Subscription
2350- var msgSend , msgRecv pq .NullTime
2349+ var msgSend , msgRecv sql .NullTime
23512350 if err := rows .Scan (& s .OID , & s .Name , & s .DBName , & s .Enabled , & s .PubCount ,
23522351 & s .TableCount , & s .WorkerCount , & s .ReceivedLSN , & s .LatestEndLSN ,
23532352 & msgSend , & msgRecv , & s .LatestEndTime , & s .ApplyErrorCount , & s .SyncErrorCount ); err != nil {
0 commit comments