go.d/postgres: fix checkpoints query for postgres 17 (#18629)
Ilya Mashchenko committed
Sep 27, 2024 at 17:00 UTC
e41f16441d661a7d333c07379cda151acbae2737
4 files changed
+23
-5
src/go/plugin/go.d/modules/postgres/collect.go
+1
@@ -18,6 +18,7 @@ const (
18
pgVersion94 = 9_04_00
19
pgVersion10 = 10_00_00
20
pgVersion11 = 11_00_00
21
+ pgVersion17 = 17_00_00
22
)
23
24
func (p *Postgres) collect() (map[string]int64, error) {
src/go/plugin/go.d/modules/postgres/do_query_global.go
+1
-1
@@ -97,7 +97,7 @@ func (p *Postgres) doQueryConnectionsState() error {
97
}
98
99
func (p *Postgres) doQueryCheckpoints() error {
100
- q := queryCheckpoints()
100
+ q := queryCheckpoints(p.pgVersion)
101
102
return p.doQuery(q, func(column, value string, _ bool) {
103
switch column {
src/go/plugin/go.d/modules/postgres/postgres_test.go
+2
-2
@@ -155,7 +155,7 @@ func TestPostgres_Check(t *testing.T) {
155
156
mockExpect(t, m, queryServerCurrentConnectionsUsed(), dataVer140004ServerCurrentConnections)
157
mockExpect(t, m, queryServerConnectionsState(), dataVer140004ServerConnectionsState)
158
- mockExpect(t, m, queryCheckpoints(), dataVer140004Checkpoints)
158
+ mockExpect(t, m, queryCheckpoints(140004), dataVer140004Checkpoints)
159
mockExpect(t, m, queryServerUptime(), dataVer140004ServerUptime)
160
mockExpect(t, m, queryTXIDWraparound(), dataVer140004TXIDWraparound)
161
mockExpect(t, m, queryWALWrites(140004), dataVer140004WALWrites)
@@ -258,7 +258,7 @@ func TestPostgres_Collect(t *testing.T) {
258
259
mockExpect(t, m, queryServerCurrentConnectionsUsed(), dataVer140004ServerCurrentConnections)
260
mockExpect(t, m, queryServerConnectionsState(), dataVer140004ServerConnectionsState)
261
- mockExpect(t, m, queryCheckpoints(), dataVer140004Checkpoints)
261
+ mockExpect(t, m, queryCheckpoints(140004), dataVer140004Checkpoints)
262
mockExpect(t, m, queryServerUptime(), dataVer140004ServerUptime)
263
mockExpect(t, m, queryTXIDWraparound(), dataVer140004TXIDWraparound)
264
mockExpect(t, m, queryWALWrites(140004), dataVer140004WALWrites)
src/go/plugin/go.d/modules/postgres/queries.go
+19
-2
@@ -51,12 +51,14 @@ GROUP BY state;
51
`
52
}
53
54
-func queryCheckpoints() string {
54
+func queryCheckpoints(version int) string {
55
// definition by version: https://pgpedia.info/p/pg_stat_bgwriter.html
56
// docs: https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-PG-STAT-BGWRITER-VIEW
57
// code: https://github.com/postgres/postgres/blob/366283961ac0ed6d89014444c6090f3fd02fce0a/src/backend/catalog/system_views.sql#L1104
58
59
- return `
59
+ if version < pgVersion17 {
60
+
61
+ return `
62
SELECT checkpoints_timed,
63
checkpoints_req,
64
checkpoint_write_time,
@@ -68,6 +70,21 @@ SELECT checkpoints_timed,
70
buffers_backend_fsync,
71
buffers_alloc * current_setting('block_size')::numeric AS buffers_alloc_bytes
72
FROM pg_stat_bgwriter;
73
+`
74
+ }
75
+ return `
76
+SELECT
77
+ chkpt.num_timed AS checkpoints_timed,
78
+ chkpt.num_requested AS checkpoints_req,
79
+ chkpt.write_time AS checkpoint_write_time,
80
+ chkpt.sync_time AS checkpoint_sync_time,
81
+ chkpt.buffers_written * current_setting('block_size')::numeric AS buffers_checkpoint_bytes,
82
+ bgwrtr.buffers_clean * current_setting('block_size')::numeric AS buffers_clean_bytes,
83
+ bgwrtr.maxwritten_clean,
84
+ bgwrtr.buffers_alloc * current_setting('block_size')::numeric AS buffers_alloc_bytes
85
+FROM
86
+ pg_stat_bgwriter AS bgwrtr,
87
+ pg_stat_checkpointer AS chkpt;
88
`
89
}
90