在 PostgreSQL 8.4.9 中使用 pgbouncer 1.3.4 的pool_mode = session(但有些用户直接连接到数据库)-当我以“超级用户”身份登录时
psql -U postgres -W postgres
请问使用什么命令可以断开所有“普通用户”的连接并阻止他们在我执行维护时再次连接(我想重命名一些表列以获得更一致的命名并相应地更改一些存储过程)。
我找不到它III. 服务器管理文档。
或者我应该编辑 pg_hba.conf 并重新启动服务/进程?
答案1
据我所知,没有这种方案——而且我看不出它有什么价值。PgSQL 使您能够实时修改数据库结构,而且在许多情况下,只需一个事务即可完成。
任何模式迁移的难点在于让数据库用户知道他们必须改变使用数据库的方式(修改调用数据库的代码、重写文档、重新培训执行手动、临时查询的用户)。在进行维护时阻止用户连接对此没有帮助,因为当您允许他们重新连接时,他们只会按照旧的方式做事。如果您能够在维护的同时对所有数据库用户进行锁步迁移,那么您也可以告诉他们所有人在您摆弄数据库时停止使用数据库。
答案2
启动它们应该很简单,就像这样:
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... 结合使用...
答案3
根据https://dba.stackexchange.com/a/163518/118371你也可以:
ALTER DATABASE db SET CONNECTION LIMIT 0;
和更多