@cryptotaxi247 / netdata-1 / commits / e41f16441

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