Выполнять команды после окончания pg_dump - PullRequest
0 голосов
/ 02 октября 2019

Я хочу выполнять команды после окончания pg_dump. Пример

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'

, то ничего не возвращается. Я уже понял, что это связано с транзакцией. Есть ли способ решить такую ​​проблему без транзакции?

Если изначально нет дампа, то, конечно, операторы после цикла выполняются успешно.

...