Repmgr cleanup trigger
From PostgreSQL wiki
Jump to navigationJump to searchrepmgr cleanup trigger
Works with PostgreSQL
9.0+
Written in
PL/pgSQL
Depends on
repmgr
repmgr's repmgrd daemon can optionally store replication lag history in the repl_monitor table; this table can grow quite quickly and requires regular pruning. This can be achieved by a cronjob which executes 'repmgr cluster cleanup'; alternatively following trigger could be used (only tested on repmgr 1.2.0):
Cleanup trigger
SET search_path=repmgr_CLUSTERNAME; -- change CLUSTERNAME to your repmgr cluster name
CREATE OR REPLACE FUNCTION repl_cleanup_proc() RETURNS trigger LANGUAGE plpgsql
SET search_path=repmgr_CLUSTERNAME
AS $$
DECLARE
cleanup_age interval = '1 day'; -- how many records to keep
cleanup_batch interval = '1 hour'; -- how many records to delete in one shot
BEGIN
IF EXISTS(SELECT * FROM repl_monitor WHERE last_monitor_time < (now() - cleanup_age - cleanup_batch)) THEN
DELETE FROM repl_monitor WHERE last_monitor_time < (now() - cleanup_age);
END IF;
RETURN new;
END;
$$;
CREATE TRIGGER repl_cleanup_trigger AFTER INSERT ON repl_monitor FOR EACH STATEMENT EXECUTE PROCEDURE repl_cleanup_proc();
-- Test the trigger (does not insert any data, but triggers deletion if necessary)
INSERT INTO repl_monitor (primary_node) SELECT null WHERE false;