Pergunta

Eu tenho um banco de dados POSGRESQL (sou o proprietário) e gostaria de soltá-lo e recriá-lo de um despejo.

O problema é que existem alguns aplicativos (dois sites, trilhos e perl) que acessam o banco de dados regularmente. Então, eu recebo um erro "banco de dados está sendo acessado por outros usuários".

Eu li que uma possibilidade é obter os PIDs dos processos envolvidos e matá -los individualmente. Eu gostaria de fazer algo mais limpo, se possível.

O Phppgadmin parece fazer o que eu quero: sou capaz de soltar esquemas usando sua interface da Web, mesmo quando os sites estão ligados, sem obter erros. Então, estou investigando como seu código funciona. No entanto, não sou especialista em PHP.

Estou tentando entender o código Phppgadmin para ver como ele faz. eu descobri uma linha (257 em esquemas.php) onde diz:

$data->dropSchema(...)

$data é uma variável global e não consegui encontrar onde está definida.

Quaisquer indicadores seriam muito apreciados.

Foi útil?

Solução

Primeiro, encontre todos os procesid atuais usando seu banco de dados:

SELECT usename, procpid FROM pg_stat_activity WHERE datname = current_database();

Segundo, mate os processos que você não deseja:

SELECT pg_terminate_backend(your_procpid);

Isso funciona a partir da versão 8.4, caso contrário, PG_TERMINATE_BACKEND () é desconhecido e você deve matar o processo no nível do sistema operacional.


Para soltar rapidamente todas as conexões conectadas a um determinado banco de dados, este atalho funciona bem. Deve correr como superusuário:

SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname='YourDB';

Nas versões mais recentes do Postgres (pelo menos 9,2+, provavelmente mais cedo), os nomes das colunas mudaram e a consulta é:

SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='YourDB';

Outras dicas

Não tenho certeza sobre o PostGresql, mas acho que uma possível solução seria bloquear a tabela para que outros processos falhem quando tentarem acessá -la.

Ver:http://www.postgresql.org/docs/current/static/sql-lock.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top