Я использовал интерактивный psql для выполнения переиндексации в одной из наших баз данных. К сожалению, соединение ssh разорвалось, пока работала переиндексация, и я по глупости не поместил psql в экранное окно (я не понимал, сколько времени это заняло!)
Как только мне удалось снова войти в систему, я запустил
ps aux | grep REINDEX
и вывод, казалось, указывал, что переиндекс все еще выполняется:
postgres 6180 99.9 0.0 774960 4804 ? Rs Jun27 3022:02 postgres: postgres my_db_name [local] REINDEX
Каково ожидаемое поведение postgres в этой ситуации? Будет ли он продолжать выполнять переиндексирование до завершения?
Кроме того, есть ли способ повторно подключиться к psql таким образом, чтобы я мог продолжать видеть незавершенный вывод переиндексации?
По моему опыту, подобные вещи умирают, как только ваша оболочка прекращает работу из-за простоя.
Это одно из обстоятельств, при которых вам следует использовать что-то вроде GNU Screen. С помощью GNU Screen вы входите на свой сервер, набираете screen
, а затем приступайте к работе. Вы можете создать дополнительные терминалы внутри этого сеанса экрана с помощью Ctrl + a c , и переключаться между ними с помощью Ctrl + n и Ctrl + p. Чтобы отключиться от экрана GNU, введите Ctrl + a d. Для повторного подключения вы можете войти в систему и запустить screen -r
.
Практическое руководство от Kuro5hin доступно здесь: http://www.kuro5hin.org/story/2004/3/9/16838/14935
REINDEX может быть прерван, поскольку он пытается отправить обратную связь в psql, который больше не существует, и это, наконец, распространяется как «клиент отключен». Или, если psql все еще существует, он, наконец, умрет, когда его буферы tty и sshd переполнятся ... это, по-видимому, займет больше времени.
Повторное подключение, чтобы увидеть вывод этой команды, на самом деле невозможно, нет.