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

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

Ответы [ 2 ]

83 голосов
/ 18 августа 2010

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

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

4 голосов
/ 06 марта 2014

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...