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