diff --git a/backend/app/services/collector.py b/backend/app/services/collector.py index 8a8eb86..e20bf22 100644 --- a/backend/app/services/collector.py +++ b/backend/app/services/collector.py @@ -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 = { diff --git a/backend/app/services/overview_collector.py b/backend/app/services/overview_collector.py index eb82123..8d64fdc 100644 --- a/backend/app/services/overview_collector.py +++ b/backend/app/services/overview_collector.py @@ -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, """