Назад | Перейти на главную страницу

Заблокируйте пользователей PostgreSQL для обслуживания

В 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?"