pg_cron优化案例--terminate pg_cron launcher可自动拉起
-- 在pg_cron扩展被删除或禁用时,可以通过以下方式清理pg_cron相关的资源和对象:
-- 删除pg_cron相关的函数和触发器
DO $$
DECLARE
r RECORD;
BEGIN
FOR r IN SELECT prosrc, proname FROM pg_proc JOIN pg_namespace ON (pg_proc.pronamespace = pg_namespace.oid) WHERE pronamespace = 'pg_cron'::regnamespace OR proname LIKE 'pg_cron_%' LOOP
EXECUTE 'DROP FUNCTION ' || quote_ident(r.proname) || '()';
END LOOP;
FOR r IN SELECT tgname FROM pg_trigger WHERE tgname LIKE 'pg_cron_%' LOOP
EXECUTE 'DROP TRIGGER ' || quote_ident(r.tgname);
END LOOP;
END $$;
-- 删除pg_cron相关的扩展
DROP EXTENSION IF EXISTS pg_cron;
-- 删除pg_cron相关的数据表和序列
DROP TABLE IF EXISTS cron_job;
DROP TABLE IF EXISTS cron_schedule;
DROP SEQUENCE IF EXISTS cron_job_id_seq;
DROP SEQUENCE IF EXISTS cron_schedule_id_seq;
-- 删除pg_cron相关的数据库角色和权限
REVOKE ALL ON SCHEMA pg_cron FROM public;
DROP SCHEMA IF EXISTS pg_cron CASCADE;
-- 删除pg_cron相关的后台进程
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE usename = 'pg_cron';
-- 注意:以上操作涉及删除函数、触发器、扩展、表和序列,以及角色权限。执行前请确保已做好备份。
这段代码展示了如何清理pg\_cron扩展的相关资源,包括删除相关的函数、触发器、扩展、表和序列,以及回收相关的数据库角色权限。在执行这些操作之前,确保已经做好了必要的备份,并且理解这些操作的后果。
评论已关闭