Skip to content

Commit 6e3d1f7

Browse files
committed
Move to jackc/pgx driver.
1 parent 226b450 commit 6e3d1f7

File tree

3 files changed

+31
-25
lines changed

3 files changed

+31
-25
lines changed

collector/collect.go

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

235236
func 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 {

go.mod

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ require (
55
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.6.0
66
github.com/aws/aws-sdk-go v1.44.305
77
github.com/dustin/go-humanize v1.0.1
8+
github.com/jackc/pgx/v5 v5.6.0
89
github.com/pborman/getopt v1.1.0
9-
github.com/rapidloop/pq v1.1.1
1010
golang.org/x/mod v0.18.0
1111
golang.org/x/term v0.21.0
1212
)
@@ -17,13 +17,15 @@ require (
1717
github.com/AzureAD/microsoft-authentication-library-for-go v0.4.0 // indirect
1818
github.com/golang-jwt/jwt v3.2.1+incompatible // indirect
1919
github.com/google/uuid v1.1.1 // indirect
20+
github.com/jackc/pgpassfile v1.0.0 // indirect
21+
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
22+
github.com/jackc/puddle/v2 v2.2.1 // indirect
2023
github.com/jmespath/go-jmespath v0.4.0 // indirect
2124
github.com/kylelemons/godebug v1.1.0 // indirect
2225
github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 // indirect
23-
github.com/xdg-go/stringprep v1.0.0 // indirect
24-
github.com/xdg/stringprep v1.0.0 // indirect
2526
golang.org/x/crypto v0.24.0 // indirect
2627
golang.org/x/net v0.26.0 // indirect
28+
golang.org/x/sync v0.7.0 // indirect
2729
golang.org/x/sys v0.21.0 // indirect
2830
golang.org/x/text v0.16.0 // indirect
2931
)

go.sum

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzq
2121
github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU=
2222
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
2323
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
24+
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
25+
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
26+
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
27+
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
28+
github.com/jackc/pgx/v5 v5.6.0 h1:SWJzexBzPL5jb0GEsrPMLIsi/3jOo7RHlzTjcAeDrPY=
29+
github.com/jackc/pgx/v5 v5.6.0/go.mod h1:DNZ/vlrUnhWCoFGxHAG8U2ljioxukquj7utPDgtQdTw=
30+
github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
31+
github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
2432
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
2533
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
2634
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
@@ -36,15 +44,10 @@ github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqgg
3644
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
3745
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
3846
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
39-
github.com/rapidloop/pq v1.1.1 h1:nC/PmemMKppcgQ1gE2BqxqlEEqzJIHL3afZOjjZhvnE=
40-
github.com/rapidloop/pq v1.1.1/go.mod h1:KCIg3rAcDl7ELp5s30z4lIp1xaOujoaMXnlYKhHECFo=
4147
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
42-
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
48+
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
4349
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
44-
github.com/xdg-go/stringprep v1.0.0 h1:W/PJi55zhi8ClBDgGZK2sdhe6QxuHS6YiVwrGEOYjdE=
45-
github.com/xdg-go/stringprep v1.0.0/go.mod h1:1lAKNhwXFE4//YT4gqVxkhclqvPTWe2Kyd6L59AbR8w=
46-
github.com/xdg/stringprep v1.0.0 h1:d9X0esnoa3dFsV0FG35rAT0RIhYFlPq7MiP+DW89La0=
47-
github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
50+
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
4851
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
4952
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
5053
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -64,6 +67,8 @@ golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ=
6467
golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE=
6568
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
6669
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
70+
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
71+
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
6772
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
6873
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
6974
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -96,4 +101,4 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
96101
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
97102
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
98103
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
99-
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
104+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

0 commit comments

Comments
 (0)