2008-09-27 27 views
84

Necesito cambiar el nombre de la base de datos pero cuando lo hago en PGAdmin : ALTER DATABASE "databaseName" RENAME TO "databaseNameOld" me dijo que no puede.PostgreSQL - Renombrar base de datos

¿Cómo puedo hacerlo?

(Versión 8.3 en Windows XP)

actualización

  • El primer mensaje de error: No se puede porque se conectan a la misma. Así que seleccioné otra base de datos e hice las consultas.

  • Aparece un segundo mensaje de error que me dice que ha llegado la conexión de usuario. Veo en la pantalla PGAdmin que tiene muchos PID pero están inactivos ... No veo cómo matarlos.

+1

Puede explicar por qué no puede hacerlo. Acabo de hacerlo (en una plataforma diferente) y funcionó –

+1

¿Cuál es el mensaje de error exacto y buscó este error en los documentos de Postgres? Tal vez haya una razón perfecta para ese comportamiento. Normalmente cambiar el nombre debería funcionar. – unexist

+0

Actualizado ver la pregunta –

Respuesta

133

Trate de no citar el nombre de base de datos:

ALTER DATABASE people RENAME TO customers; 

también asegurarse de que no hay otros clientes conectados a la base de datos en el momento. Por último, intente publicar el mensaje de error que devuelve para que podamos obtener un poco más de información.

+12

se requiere cotización cuando el nombre tiene mayúscula en el mismo. –

+4

Este no es el caso, pero también se requieren citas cuando el nombre tiene un '.' o' @ '. – omar

+1

Citando también es necesario cuando el nombre contiene un '-' – GreenTurtle

1

¡Unexist me dijo en un comentario para reiniciar la base de datos y funciona! Al reiniciar la base de datos, se eliminó toda la conexión existente y luego me conecté a otra base de datos y pude cambiarle el nombre con mi consulta inicial.

Thx all.

1

En lugar de implementar un nuke (reiniciar el servidor), debe intentar cerrar las conexiones que le molestan, ya sea averiguar de dónde son y cerrar los procesos del cliente o mediante la función pg_cancel_backend().

52

Para referencia futura, que debe 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"; 

Tenga en cuenta que la columna de mesa pg_stat_activitypid fue nombrado como procpid en versiones anteriores a la 9.2. Entonces, si su versión de PostgreSQL es menor que 9.2, use procpid en lugar de pid.

+3

que funcionó para mí, gracias! pero el nombre de la columna en pg_stat_activity es pid y no procpid. ('PostgreSQL 9.3.5 en x86_64-apple-darwin, compilado por i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Basado en Apple Inc. compilación 5658) (LLVM build 2336.9.00), 64 -bit') – bodman

4

Me acabo de encontrar con esto y a continuación es lo que ha funcionado:

1) pdAdmin es una de las sesiones. Use psql en su lugar.
2) Detenga el pgBouncer y/o los servicios del programador en Windows, ya que estos también crean sesiones

Cuestiones relacionadas