pg_terminate_backend()运维改造--打印调用记录及被终止query文本
-- 创建函数用于打印pg_terminate_backend调用记录
CREATE OR REPLACE FUNCTION log_backend_termination() RETURNS trigger AS $$
BEGIN
-- 获取被终止的backend的pid和对应的query
PERFORM pg_stat_activity.pid, pg_stat_activity.query FROM pg_stat_activity WHERE pid = pg_terminate_backend(TG_ARG_0);
-- 输出日志信息
RAISE NOTICE 'Backend terminated: pid=% | query=%', pg_stat_activity.pid, pg_stat_activity.query;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
-- 为pg_signal_backend事件创建触发器,以调用上面的函数
CREATE TRIGGER log_backend_termination_trigger
AFTER SERVER FILTER
ON pg_signal_backend
FOR EACH STATEMENT
EXECUTE FUNCTION log_backend_termination();
这段代码首先定义了一个函数log_backend_termination
,它在被调用时会获取即将被终止backend的pid和当前执行的query,然后打印出终止记录。接着,它创建了一个触发器log_backend_termination_trigger
,该触发器会在每次pg_signal_backend
事件发生后,即在backend被终止后运行这个函数。这样可以记录终止事件和相关query的文本,为运维提供更多信息。
评论已关闭