Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在pg_转储结束后执行命令_Sql_Postgresql_Plpgsql - Fatal编程技术网

Sql 在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

我想在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=%', _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问题。您试图实现的最终目标是什么?我想在被此转储阻止的转储之后执行一些命令,以避免所有派生锁