Я хочу отбросить все подключения (сеансы), которые в данный момент открыты, к определенной базе данных PostgreSQL, но без перезапуска сервера или отключения соединений с другими базами данных.
Как я могу это сделать?
postgresql
connections
session
Сорин
источник
источник
Ответы:
Вот мой ответ на очень похожий вопрос о StackOverflow.
В зависимости от вашей версии postgresql вы можете столкнуться с ошибкой, из-
pg_stat_activity
за которой пропускаются активные соединения от сброшенных пользователей. Эти соединения также не показаны внутри pgAdminIII.Если вы выполняете автоматическое тестирование (в котором вы также создаете пользователей), это может быть вероятным сценарием.
В этом случае вам нужно вернуться к таким запросам, как:
источник
Такой запрос должен помочь (при условии, что база данных называется 'db'):
pid
Раньше вызывалиprocpid
, так что если вы используете версию postgres старше 9.2, вы можете попробовать следующее:Однако вы должны быть суперпользователем, чтобы отключить других пользователей.
Это также может быть полезно
REVOKE CONNECT ON DATABASE FROM PUBLIC
или что-то подобное, а потомGRANT
это потом.источник
Это можно использовать для «освобождения» базы данных от клиентских подключений, чтобы вы, например, могли ее переименовать:
Помните, что это может вызвать проблемы в ваших клиентских приложениях. Фактически данные не должны прерываться из-за использования транзакций.
источник