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()
|
WHERE datname = current_database()
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
bgwriter = await conn.fetchrow(
|
checkpointer_view_exists = await conn.fetchval("SELECT to_regclass('pg_catalog.pg_stat_checkpointer') IS NOT NULL")
|
||||||
"""
|
bgwriter = None
|
||||||
SELECT checkpoints_timed, checkpoints_req, buffers_checkpoint, buffers_clean, maxwritten_clean
|
if checkpointer_view_exists:
|
||||||
FROM pg_stat_bgwriter
|
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:
|
if stat_db is None:
|
||||||
stat_db = {
|
stat_db = {
|
||||||
|
|||||||
@@ -106,12 +106,31 @@ async def collect_overview(
|
|||||||
errors,
|
errors,
|
||||||
"pg_stat_database_perf",
|
"pg_stat_database_perf",
|
||||||
)
|
)
|
||||||
bgwriter = await _safe_fetchrow(
|
checkpointer_view_exists = await _safe_fetchval(
|
||||||
conn,
|
conn,
|
||||||
"SELECT checkpoints_timed, checkpoints_req FROM pg_stat_bgwriter",
|
"SELECT to_regclass('pg_catalog.pg_stat_checkpointer') IS NOT NULL",
|
||||||
errors,
|
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(
|
autovac_workers = await _safe_fetchval(
|
||||||
conn,
|
conn,
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user