В PostgreSQL 8.4.9 с pgbouncer 1.3.4 в pool_mode = session (но некоторые пользователи подключаются к базе данных напрямую) - когда я вхожу в систему как «суперпользователь» с
psql -U postgres -W postgres
Какая команда предназначена для отключения всех «обычных пользователей» и предотвращения их повторного подключения, пока я выполняю обслуживание (я хотел бы переименовать некоторые столбцы таблицы для более согласованного именования и, соответственно, изменить некоторые хранимые процедуры).
Я не могу найти это в III. Администрирование Сервера док.
Или мне следует отредактировать pg_hba.conf и перезапустить службу / процесс?
Насколько мне известно, его нет - и я не вижу в этом ценности. PgSQL дает вам возможность изменять структуру базы данных в реальном времени, и во многих случаях все в рамках одной транзакции.
Сложная часть любой миграции схемы заключается в том, чтобы пользователи базы данных знали, что они должны изменить способ использования базы данных (изменение кода, который вызывает базу данных, переписывание документации, повторное обучение пользователей, выполняющих ручные специальные запросы). . Предотвращение подключения пользователей во время обслуживания не помогает, потому что они просто собираются делать что-то по-старому, когда вы позволяете им повторно подключаться. Если вы можете выполнить поэтапную миграцию всех пользователей базы данных одновременно с обслуживанием, вы также сможете сказать им всем, чтобы они перестали использовать базу данных, пока вы все равно возитесь с ней.
Отбросить их должно быть проще простого:
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 ...
ссылка: "Как мне отсоединить всех остальных пользователей от базы данных postgres?"