PostgreSQL, SQL

Прервать соединения IP с базой данных в PostgreSQL

В сообщении Принудительное удаление базы данных в PostgreSQL я писала о том, как принудительно закрыть все соединения с базой данных. Это удобно, когда есть «висящие» соединения, которые никак не хотят завершаться. Или нужно срочно удалить базу данных и нет времени выяснять, кто забыл от нее отключиться 🙂 Сегодня я хочу показать, как прервать соединения IP с базой данных.

Сначала выведем количество подключений с каждого IP к базе данных:

select client_addr, count(*) as connections_count, 
to_char(state_change, 'DD.MM.YYYY HH24:MI:SS') as datetime 
from pg_stat_activity 
where datname = 'database_name' 
group by client_addr, datetime
Получить количество подключений IP к базе данных
  • client_addr — IP-адрес клиента
  • connections_count — количество подключений к базе данных с данного IP
  • datetime — дата и время последней активности с IP.

Прервать соединения IP с базой данных по его IP:

UPDATE pg_database SET datallowconn = 'false' 
WHERE datname = 'database_name'; 
SELECT pg_terminate_backend(pg_stat_activity.pid) 
FROM pg_stat_activity "
WHERE pg_stat_activity.datname = 'database_name' 
AND pid <> pg_backend_pid() and 
client_addr = 'client_ip'; 
UPDATE pg_database SET datallowconn = 'true' 
WHERE datname = 'database_name';
  1.  Запретить дальнейшие подключения к базе данных database_name;
  2. Завершить подключения IP client_ip к базе данных database_name;
  3. Разрешить подключения к базе данных database_name.

Использованная документация:

https://postgrespro.ru/docs/postgrespro/12/functions-admin

https://postgrespro.ru/docs/postgrespro/12/functions-info

https://postgrespro.ru/docs/postgrespro/12/monitoring-stats

Оставьте своё мнение...

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.