Sql 在pg_转储结束后执行命令
我想在pg_转储结束后执行命令。范例Sql 在pg_转储结束后执行命令,sql,postgresql,plpgsql,Sql,Postgresql,Plpgsql,我想在pg_转储结束后执行命令。范例 DO $$ DECLARE _attempts integer = 1; _pid integer; BEGIN _pid = (SELECT pid FROM pg_stat_activity WHERE application_name = 'pg_dump'); WHILE (_pid IS NOT NULL) LOOP RAISE INFO 'Attempts=%, pid=%', _atte
DO $$
DECLARE
_attempts integer = 1;
_pid integer;
BEGIN
_pid = (SELECT pid FROM pg_stat_activity WHERE application_name = 'pg_dump');
WHILE (_pid IS NOT NULL) LOOP
RAISE INFO 'Attempts=%, pid=%', _attempts, _pid;
PERFORM pg_sleep(5);
_pid = (SELECT pid FROM pg_stat_activity WHERE application_name = 'pg_dump');
_attempts = _attempts + 1;
END LOOP;
SELECT 1;
...;
END$$;
但问题是,即使在转储结束后,循环也变得无限大,我必须手动中断它。Raise info继续输出相同的pid。如果我现在手动重复
SELECT pid FROM pg_stat_activity WHERE application_name = 'pg_dump'
然后它不会返回任何内容。我已经意识到这是由于交易。没有交易,有没有办法解决这样的问题
如果最初没有转储,那么循环后的语句当然会成功执行。为什么不将这些命令放入启动pg_dump的shell脚本中?由于网络拓扑和安全策略的原因,无法这样做这是一个典型的XY问题。您试图实现的最终目标是什么?我想在被此转储阻止的转储之后执行一些命令,以避免所有派生锁