PostgreSQL, SQL

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

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

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

[pastacode lang=»sql» manual=»select%20client_addr%2C%20count(*)%20as%20connections_count%2C%20%0Ato_char(state_change%2C%20’DD.MM.YYYY%20HH24%3AMI%3ASS’)%20as%20datetime%20%0Afrom%20pg_stat_activity%20%0Awhere%20datname%20%3D%20’database_name’%20%0Agroup%20by%20client_addr%2C%20datetime» message=»Получить количество подключений IP к базе данных» highlight=»» provider=»manual»/]

  • client_addr — IP-адрес клиента
  • connections_count — количество подключений к базе данных с данного IP
  • datetime — дата и время последней активности с IP.

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

[pastacode lang=»sql» manual=»UPDATE%20pg_database%20SET%20datallowconn%20%3D%20’false’%20%0AWHERE%20datname%20%3D%20’database_name’%3B%20%0ASELECT%20pg_terminate_backend(pg_stat_activity.pid)%20%0AFROM%20pg_stat_activity%20%22%0AWHERE%20pg_stat_activity.datname%20%3D%20’database_name’%20%0AAND%20pid%20%3C%3E%20pg_backend_pid()%20and%20%0Aclient_addr%20%3D%20’client_ip’%3B%20%0AUPDATE%20pg_database%20SET%20datallowconn%20%3D%20’true’%20%0AWHERE%20datname%20%3D%20’database_name’%3B» message=»» highlight=»1,3,8″ provider=»manual»/]

  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 для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.