PostgreSQL - mudar o nome da base de dados

Preciso de mudar o nome da base de dados, mas quando o fizer ... Ele disse-me que não pode.

Como posso fazer isso?

(Versão 8.3 sobre WindowsXP)

actualizar

  • a primeira mensagem de erro: Não pode porque eu estava conectado a ele. Então eu selecionei uma outra base de dados e fiz as consultas.

  • Eu recebo uma segunda mensagem de erro dizendo - me que ele veio user connect. Vejo na tela que ela tem muitos mas eles são inactivo... Não vejo como matá-los.

Author: Jai Kumar Rajput, 2008-09-27

5 answers

Tente não citar o nome da base de dados:

ALTER DATABASE people RENAME TO customers;

Certifique-se também de que não existem outros clientes ligados à base de dados na altura. Por último, tente postar a mensagem de erro que ele retorna para que possamos obter um pouco mais de informação.

 152
Author: bmdhacks, 2008-09-27 15:03:27

Para referência futura, você deve ser capaz de:

-- disconnect from the database to be renamed
\c postgres

-- force disconnect all other clients from the database to be renamed
SELECT pg_terminate_backend( pid )
FROM pg_stat_activity
WHERE pid <> pg_backend_pid( )
    AND datname = 'name of database';

-- rename the database (it should now have zero clients)
ALTER DATABASE "name of database" RENAME TO "new name of database";

Note que a coluna da tabela pg_stat_activity pid foi nomeada como procpid em versões anteriores a 9.2. Assim, se a sua versão PostgreSQL for inferior a 9.2, use procpid em vez de pid.

 63
Author: gsiems, 2017-01-16 08:29:49
Só encontrei isto e lá em baixo é que resultou.

1) pdAdmin é uma das sessões. Utilizar psql em vez disso.
2) Pare os serviços pgBouncer e/ou scheduler no Windows, uma vez que estes também criam sessões

 7
Author: smoore4, 2016-08-23 15:49:47
O Unexist disse-me em comentário para reiniciar a base de dados e funciona! Reiniciando a base de dados matar toda a conexão existente e, em seguida, eu me conectar a uma outra base de dados e foi capaz de renomeá-lo com a minha consulta inicial.

Thx all.

 2
Author: Patrick Desjardins, 2008-09-27 15:16:02

Em vez de implantar uma bomba nuclear (reiniciar o servidor), deve tentar fechar as ligações que o incomodam, quer descobrindo de onde são e desligando os processos do cliente ou usando o pg_cancel_backend() função.

 2
Author: Milen A. Radev, 2008-09-27 15:43:10