SELECT pg_terminate_backend( psa.procpid )
FROM pg_stat_activity psa
JOIN pg_user u
ON u.usesysid = psa.usesysid
WHERE psa.procpid <> pg_backend_pid( )
AND psa.datname = current_database( )
AND u.usename NOT IN ('list', 'of', 'users', 'to', 'not', 'disconnect')
;
您可以将其与revoke connect on <datname> from <role>编辑 pg_hba.conf 结合起来...
据我所知,没有一个——而且我看不到它的价值。PgSQL 使您能够实时修改数据库结构,并且在许多情况下都在单个事务中完成。
任何模式迁移中的困难部分是让数据库用户知道他们必须改变他们使用数据库的方式(修改调用数据库的代码、重写文档、重新培训执行手动、临时查询的用户) . 在您进行维护时阻止用户连接对此没有帮助,因为当您允许他们重新连接时,他们只会按照旧方式做事。如果您能够在维护的同时对数据库的所有用户进行锁步迁移,那么您还可以在您随意摆弄数据库时告诉他们所有人停止使用数据库。
启动它们应该像下面这样简单:
您可以将其与
revoke connect on <datname> from <role>
编辑 pg_hba.conf 结合起来...参考:“如何从 postgres 数据库中分离所有其他用户? ”
根据https://dba.stackexchange.com/a/163518/118371,您还可以:
ALTER DATABASE db SET CONNECTION LIMIT 0;
和更多