From 1a5e53c94376774624f14d6ac50652ba22704c4c Mon Sep 17 00:00:00 2001 From: matthias Date: Thu, 9 Oct 2025 14:19:49 +0200 Subject: [PATCH 1/3] fix for pgBackRest Monitoring on Replicas --- pkg/cluster/database.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/cluster/database.go b/pkg/cluster/database.go index 36c68175..896f69a1 100644 --- a/pkg/cluster/database.go +++ b/pkg/cluster/database.go @@ -122,7 +122,7 @@ const ( ORDER BY data_time DESC LIMIT 1; - IF last_entry_timestamp < NOW() - INTERVAL '5 minutes' THEN + IF last_entry_timestamp < NOW() - INTERVAL '5 minutes' AND NOT pg_is_in_recovery() THEN DELETE FROM exporter.pgbackrestbackupinfo; ELSE RETURN; From 67bfcceb8b8cc4437cde52fe37b64cacf4dc33b7 Mon Sep 17 00:00:00 2001 From: matthias Date: Thu, 9 Oct 2025 16:06:38 +0200 Subject: [PATCH 2/3] rewrite func --- pkg/cluster/database.go | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/pkg/cluster/database.go b/pkg/cluster/database.go index 896f69a1..e79c8c00 100644 --- a/pkg/cluster/database.go +++ b/pkg/cluster/database.go @@ -134,6 +134,41 @@ const ( ); END; $$ LANGUAGE plpgsql; + + CREATE OR REPLACE FUNCTION exporter.update_pgbackrest_info() + RETURNS VOID AS $$ + DECLARE + last_entry_timestamp TIMESTAMP; + record_count INT; + BEGIN + IF pg_is_in_recovery() THEN + RAISE NOTICE 'Skipping pgbackrest_info update: running on a replica.'; + RETURN; + END IF; + + SELECT COUNT(*) INTO record_count + FROM exporter.pgbackrestbackupinfo; + + IF record_count > 0 THEN + SELECT data_time INTO last_entry_timestamp + FROM exporter.pgbackrestbackupinfo + ORDER BY data_time DESC + LIMIT 1; + + IF last_entry_timestamp >= NOW() - INTERVAL '5 minutes' THEN + RAISE NOTICE 'Skipping pgbackrest_info update: data does not need an update (last update at %).', last_entry_timestamp; + RETURN; + END IF; + + DELETE FROM exporter.pgbackrestbackupinfo; + END IF; + + EXECUTE format( + 'COPY exporter.pgbackrestbackupinfo (data) FROM program ''pgbackrest info --output=json'' WITH (FORMAT text, DELIMITER ''|'')' + ); + END; + $$ LANGUAGE plpgsql; + ` ) From ed2abae4bbed308969a4aa5793af438d79806d3d Mon Sep 17 00:00:00 2001 From: matthias Date: Thu, 9 Oct 2025 16:07:06 +0200 Subject: [PATCH 3/3] rewrite func --- pkg/cluster/database.go | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/pkg/cluster/database.go b/pkg/cluster/database.go index e79c8c00..b4428c78 100644 --- a/pkg/cluster/database.go +++ b/pkg/cluster/database.go @@ -107,34 +107,6 @@ const ( GRANT pg_execute_server_program TO cpo_exporter; - CREATE OR REPLACE FUNCTION exporter.update_pgbackrest_info() - RETURNS VOID AS $$ - DECLARE - last_entry_timestamp TIMESTAMP; - record_count INT; - BEGIN - SELECT COUNT(*) INTO record_count - FROM exporter.pgbackrestbackupinfo; - - IF record_count > 0 THEN - SELECT data_time INTO last_entry_timestamp - FROM exporter.pgbackrestbackupinfo - ORDER BY data_time DESC - LIMIT 1; - - IF last_entry_timestamp < NOW() - INTERVAL '5 minutes' AND NOT pg_is_in_recovery() THEN - DELETE FROM exporter.pgbackrestbackupinfo; - ELSE - RETURN; - END IF; - END IF; - - EXECUTE format( - 'COPY exporter.pgbackrestbackupinfo (data) FROM program ''pgbackrest info --output=json'' WITH (FORMAT text, DELIMITER ''|'')' - ); - END; - $$ LANGUAGE plpgsql; - CREATE OR REPLACE FUNCTION exporter.update_pgbackrest_info() RETURNS VOID AS $$ DECLARE