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


Tal vez pueda interesarte


Compartí este artículo