Подтвердить что ты не робот

Стоп (длинный) запуск SQL-запроса в PostgreSQL, когда сеанс или запросы больше не существуют?

Я не уверен, с чего начать эту проблему, но если у меня есть веб-приложение AJAX, которое отправляет запросы на сервер и запускает длинные запросы в базе данных (postgresql в моем случае), есть ли способ остановить или убить запросы, если он все еще работает, пользователь обновляет страницу или закрывает сеанс... и т.д.?

4b9b3361

Ответ 1

Чтобы остановить запрос:

SELECT pg_cancel_backend(procpid);

Чтобы убить соединение с базой данных:

SELECT pg_terminate_backend(procpid);

Чтобы получить обзор текущих транзакций, чтобы получить идентификатор процедуры:

SELECT * FROM pg_stat_activity;

http://www.postgresql.org/docs/current/interactive/functions-admin.html

Ответ 2

Учитывая, что ваш psql настроен на запуск и подключение к текущей базе данных разработчиков, этот один лайнер подходит для разработки при тестировании сложных запросов, которые можно повесить, просто убивает все, что работает:

Если не настроено правильно - добавьте флаги для пользователя/пароля/базы данных

psql -c "SELECT procpid FROM pg_stat_activity;" -t | xargs -n1 -I {} psql -c "SELECT pg_cancel_backend({})"