Вы можете использовать расширение dblink для подключения к базе данных и выполнения операторов для другого соединения. Это также обычно используется для регистрации ошибок до отката транзакции, например.
Быстрая демонстрация:
CREATE EXTENSION dblink; -- or run the script from contrib before version 9.1
select * from dblink('dbname=steve', $$
select datname, procpid, current_query from pg_stat_activity
$$) r(datname name, pid int, current_query text);
производит:
datname | pid | current_query
---------+------+---------------------------------------------------------------------
steve | 8535 | select * from dblink('dbname=steve', $$ +
| | select datname, procpid, current_query from pg_stat_activity+
| | $$) r(datname name, +
| | pid int, current_query text);
steve | 9235 | +
| | select datname, procpid, current_query from pg_stat_activity+
| |
так что вы можете видеть, что это две отдельные сессии. dblink предоставляет функциональность для открытия постоянного соединения и т. д., которое это простое использование пропускает. При условии, что у вас уже есть схема для размещения информации о ходе выполнения, вы можете просто вызвать dblink (), чтобы заполнить / обновить ее через второе соединение, пока ваше первое соединение продолжает выполнять свою длинную транзакцию.