PostgreSQL: Temporarily disable connections
我在PostgreSQL中有一个脚本,它每晚从dump中恢复测试数据库。该数据库由应用服务器和带有连接池的进程访问,连接池始终保持少数连接活动。
所以脚本将dump恢复到EDOCX1中(0)。然后将
如何断开所有客户机(超级用户或非超级用户)与
有没有更好的方法来做我需要的?
要将数据库"applogs"标记为不接受新连接,请执行以下操作:
1 | UPDATE pg_database SET datallowconn = FALSE WHERE datname = 'applogs'; |
另一种可能是撤销客户机角色对数据库的"连接"访问。
断开用户与数据库的连接=终止后端。因此,要断开所有其他用户与"applogs"数据库的连接,例如:
1 2 3 | SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'applogs' AND procpid <> pg_backend_pid(); |
一旦你完成了这两项工作,你就是唯一一个连接到"applogs"的用户。尽管在后端实际完成断开之前可能会有延迟?
终止当前活动连接后,还可以发出此命令,只允许超级用户登录。这假设您对所有超级用户仍然具有访问权限是正常的。希望你不会只向任何人分发超级用户权限。
1 | ALTER DATABASE your_db CONNECTION LIMIT 0; |
从PostgreSQL 9.5开始,我们最终可以:
1 | ALTER DATABASE db WITH ALLOW_CONNECTIONS FALSE; |
我有一个不同的使用场景,在这个场景中,我想为每个人(包括超级用户)永远禁用一个数据库,但还没有明确地删除它,以便能够在需要时快速重新激活它。
这对一个老的8.3 Postgres很有效:
1 | UPDATE pg_database SET datallowconn=FALSE WHERE datname='my_db_name'; |