2015-08-24 18:10 GMT-03:00 Agape World Informática Ltda <
[email protected]>:

> Como faço  para parar todos os usuarios do banco postgresql 8.2
>

Em 2015 e você usando a versão 8.2? Tem gente que gosta de sofrer mesmo...
xP


> Não estou achando.
>
>
>
> Tenho que fazer o seguinte.
>
>
>
> - drop no banco.
>
> - create
>
> - restaurar o banco.
>

Ah... Mais uma coisa que esqueci de mencionar e vou deixar aqui como
referência. O que passamos aqui vai funcionar para a grande maioria dos
casos, mas tem uma situação bem específica (e bem chata) onde um usuário
pode conectar entre o kill e o DROP DATABASE. Mesmo renomeando a base isso
pode acontecer em versões mais recentes por causa do autovacuum. Uma forma
de se resolver isso é desabilitar a possibilidade de conexão na base
fazendo um UPDATE na pg_database:

    UPDATE pg_database SET datallowconn = false WHERE datname =
'nome_da_base';
    -- Fazer o `kill -TERM <pid>`
    DROP DATABASE nome_da_base;
    ... faz o CREATE e a restauração aqui ...

Quanto à parte do kill manual na 8.2, você pode fazer via shell:

    $ psql -c "UPDATE pg_database SET datallowconn = false WHERE datname =
'nome_da_base';"
    $ psql -AXtqc "SELECT procpid FROM pg_stat_activity WHERE datname =
'nome_da_base';" | xargs kill -TERM

*ATENÇÃO:* em geral não é recomendado fazer atualização em tabelas de
catálogo, mas sabe-se que as colunas datallowcon e datistemplate da
pg_database são seguras de atualizar, tanto que na versão 9.5 criou-se as
opções ALLOW_CONNECTIONS e IS_TEMPLATE no comando ALTER DATABASE para fazer
essa operação, assim, na 9.5, ficaria:

    ALTER DATABASE nome_da_base WITH ALLOW_CONNECTIONS=false;
    SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname =
'nome_da_base';
    DROP DATABASE nome_da_base;

Atenciosamente,
-- 
Matheus de Oliveira
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a