Bloquear usuários do PostgreSQL para manutenção

4

No PostgreSQL 8.4.9 com o pgbouncer 1.3.4 em pool_mode = session (mas alguns usuários se conectam diretamente ao banco de dados) - quando eu faço login como "super usuário" com

   psql -U postgres -W postgres

Qual é o comando, por favor, desconecte todos os "usuários normais" e evite que eles se conectem novamente enquanto eu mantenho a manutenção (gostaria de renomear algumas colunas da tabela para nomear mais consistentemente e alterar alguns procedimentos armazenados).

Não consigo encontrá-lo no III. Administração do servidor doc.

Ou devo editar o pg_hba.conf e reiniciar o serviço / processo?

    
por Alexander Farber 12.05.2012 / 06:23

2 respostas

6

Não há, até onde sei, e não vejo o valor nele. O PgSQL permite modificar a estrutura do banco de dados ao vivo e, em muitos casos, tudo dentro de uma única transação.

A parte difícil em qualquer migração de esquema é fazer com que os usuários do banco de dados saibam que precisam alterar a maneira como usam o banco de dados (modificando o código que chama o banco de dados, reescrevendo a documentação, re-treinando usuários que executam consultas hoc). Evitar que os usuários se conectem enquanto você está fazendo a manutenção não ajuda com isso, porque eles só farão as coisas da maneira antiga quando você permitir que eles se reconectem. Se você for capaz de fazer uma migração de todos os usuários do banco de dados ao mesmo tempo que a manutenção, você também será capaz de dizer a todos que parem de usar o banco de dados enquanto você o manipula de qualquer maneira. / p>     

por 12.05.2012 / 07:01
1

Pontapé-los deve ser tão fácil quanto algo como:

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')
;

Você pode combinar isso com revoke connect on <datname> from <role> ou editando o pg_hba.conf ...

ref: " Como separo todos os outros usuários de um banco de dados postgres? "

    
por 15.05.2012 / 22:23

Tags