Ayer tuve la necesidad de cambiar el nombre de una base de datos en una instancia de Postgres utilizando la sentencia ALTER DATABASE
desde línea de comandos en un servidor Linux.
Desde una sesión como root, cambiar al usuario con el que corre el servidor PostgreSQL (típicamente "postgres") y conectarse a la instancia correspondiente (en este caso al instancia escuchando en el puerto 5432
, por defecto de Postgres):
root@db:~# su - postgres postgres@db:~$ psql -h localhost -p 5432 psql (10.4) Type "help" for help. postgres=#
Se desea cambiar el nombre de la base de datos "db01" a "db01_hist":
postgres=# \l db01* List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges ------+----------+----------+-------------+----------------------------- db01 | postgres | UTF8 | es_AR.UTF-8 | es_AR.UTF-8 | postgres=CTc/postgres + | | | | | role_develop=CTc/postgres+ | | | | | user_db01=Tc/postgres (1 row)
Para ello es necesario ejecutar la sentencia ALTER DATABASE nombre_actual RENAME TO nombre_nuevo
:
postgres=# alter database db01 rename to db01_hist; ALTER DATABASE
Listar la base de datos nuevamente para comprobar el cambio:
postgres=# \l db01* List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------------- db01_hist | postgres | UTF8 | es_AR.UTF-8 | es_AR.UTF-8 | postgres=CTc/postgres + | | | | | role_develop=CTc/postgres+ | | | | | user_db01=Tc/postgres (1 row)
Se observa que el nombre ha cambiado y los permisos de acceso no han sido alterados.
Referencias