@@ -3061,13 +3061,19 @@ func (c *collector) getCheckpointer() {
30613061
30623062 q := `SELECT num_timed, num_requested, restartpoints_timed,
30633063 restartpoints_req, restartpoints_done, write_time, sync_time,
3064- buffers_written, COALESCE(EXTRACT(EPOCH FROM stats_reset)::bigint, 0)
3064+ buffers_written, COALESCE(EXTRACT(EPOCH FROM stats_reset)::bigint, 0),
3065+ num_done, slru_written
30653066 FROM pg_stat_checkpointer`
3067+ if c .version < pgv18 { // num_done and slru_written only in pg >= v18
3068+ q = strings .Replace (q , "num_done" , "0" , 1 )
3069+ q = strings .Replace (q , "slru_written" , "0" , 1 )
3070+ }
30663071
30673072 var ckp pgmetrics.Checkpointer
30683073 err := c .db .QueryRowContext (ctx , q ).Scan (& ckp .NumTimed , & ckp .NumRequested ,
30693074 & ckp .RestartpointsTimed , & ckp .RestartpointsRequested , & ckp .RestartpointsDone ,
3070- & ckp .WriteTime , & ckp .SyncTime , & ckp .BuffersWritten , & ckp .StatsReset )
3075+ & ckp .WriteTime , & ckp .SyncTime , & ckp .BuffersWritten , & ckp .StatsReset ,
3076+ & ckp .NumDone , & ckp .SLRUWritten )
30713077 if err != nil {
30723078 log .Fatalf ("pg_stat_checkpointer query failed: %v" , err )
30733079 }
0 commit comments