Add support for new checkpointer statistics for PostgreSQL.
Introduced logic to check the existence of `pg_stat_checkpointer` and fetch corresponding statistics when available. This ensures compatibility with newer PostgreSQL versions while maintaining backward support using `pg_stat_bgwriter`.
This commit is contained in:
@@ -67,12 +67,33 @@ async def collect_target(target: Target) -> None:
|
||||
WHERE datname = current_database()
|
||||
"""
|
||||
)
|
||||
bgwriter = await conn.fetchrow(
|
||||
"""
|
||||
SELECT checkpoints_timed, checkpoints_req, buffers_checkpoint, buffers_clean, maxwritten_clean
|
||||
FROM pg_stat_bgwriter
|
||||
"""
|
||||
)
|
||||
checkpointer_view_exists = await conn.fetchval("SELECT to_regclass('pg_catalog.pg_stat_checkpointer') IS NOT NULL")
|
||||
bgwriter = None
|
||||
if checkpointer_view_exists:
|
||||
try:
|
||||
bgwriter = await conn.fetchrow(
|
||||
"""
|
||||
SELECT
|
||||
num_timed AS checkpoints_timed,
|
||||
num_requested AS checkpoints_req,
|
||||
0::bigint AS buffers_checkpoint,
|
||||
0::bigint AS buffers_clean,
|
||||
0::bigint AS maxwritten_clean
|
||||
FROM pg_stat_checkpointer
|
||||
"""
|
||||
)
|
||||
except Exception:
|
||||
bgwriter = None
|
||||
if bgwriter is None:
|
||||
try:
|
||||
bgwriter = await conn.fetchrow(
|
||||
"""
|
||||
SELECT checkpoints_timed, checkpoints_req, buffers_checkpoint, buffers_clean, maxwritten_clean
|
||||
FROM pg_stat_bgwriter
|
||||
"""
|
||||
)
|
||||
except Exception:
|
||||
bgwriter = None
|
||||
|
||||
if stat_db is None:
|
||||
stat_db = {
|
||||
|
||||
@@ -106,12 +106,31 @@ async def collect_overview(
|
||||
errors,
|
||||
"pg_stat_database_perf",
|
||||
)
|
||||
bgwriter = await _safe_fetchrow(
|
||||
checkpointer_view_exists = await _safe_fetchval(
|
||||
conn,
|
||||
"SELECT checkpoints_timed, checkpoints_req FROM pg_stat_bgwriter",
|
||||
"SELECT to_regclass('pg_catalog.pg_stat_checkpointer') IS NOT NULL",
|
||||
errors,
|
||||
"pg_stat_bgwriter",
|
||||
"checkpointer_view_exists",
|
||||
)
|
||||
if checkpointer_view_exists:
|
||||
bgwriter = await _safe_fetchrow(
|
||||
conn,
|
||||
"""
|
||||
SELECT
|
||||
num_timed AS checkpoints_timed,
|
||||
num_requested AS checkpoints_req
|
||||
FROM pg_stat_checkpointer
|
||||
""",
|
||||
errors,
|
||||
"pg_stat_checkpointer",
|
||||
)
|
||||
else:
|
||||
bgwriter = await _safe_fetchrow(
|
||||
conn,
|
||||
"SELECT checkpoints_timed, checkpoints_req FROM pg_stat_bgwriter",
|
||||
errors,
|
||||
"pg_stat_bgwriter",
|
||||
)
|
||||
autovac_workers = await _safe_fetchval(
|
||||
conn,
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user