по итогу должна появиться результирующая таблица, через какое-то время pgAdmin глюканул(окно с деревом серверов и БД стало пустое), пришлось перезагрузить pgAdmin, таблица так и не появилась, как мне узнать выполняется запрос ещё или нет? Если я правильно понимаю, то он же весь уходит на сервер, и выполняется там вне зависимости от клиента? или запрос прерывается как только сеанс останавливается?
После разрыва соединения и запросы скорее всего то же умирают
Подозреваю, что зависит от наличия автокоммита
Select * from pg_stat_activity; Это если интересен сам факт выполнения запроса в текущий момент
явные коммиты я не ставил, получается автокоммиты работают. Транзакция могла бы прерваться и откатиться в случае какой-то ошибки на одном из этапов запроса, но если этих ошибок нет, а просто прервался сеанс с клиентом, прерывается ли транзакция... но я склоняюсь уже к тому что все таки прерывается и сама транзакция когда коннект с клиентом теряется, спасибо за ответ
ага спасибо, это похоже то что нужно, здесь же указаны сами процессы на сервере
При потере подключения незавершенная транзакция откатывается, по другому не может быть, т.к. неизвестно, сколько ещё запросов этой транзакции не успело выполниться до разрыва подключения. Другое дело, что во время выполнения запроса, обмена по сети нет (если запрос не возвращает набор данных), так что до его завершения субд узнает о разрыве только если настроен TCP keep alive.
Понял, спасибо, пошёл гуглить про tcp keep alive
На самом деле -- если не reset компьютэра-клиента и не проблемы сети -- то клиент TCP RST пошёлт, конечно жэ и всё закроется.
Бывает, что по пути между клиентом и сервером соединение разрывают без RST
Обсуждают сегодня