Я хочу выполнять команды после окончания 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'
, то ничего не возвращается. Я уже понял, что это связано с транзакцией. Есть ли способ решить такую проблему без транзакции?
Если изначально нет дампа, то, конечно, операторы после цикла выполняются успешно.