Aquí hay una descripción de cómo mover una base de datos PostgreSQL existente a una nueva ubicación (carpeta, partición), en Arch Linux (este procedimiento debería ser similar para otras distribuciones de Linux).
pg_dumpall
es una utilidad para escribir (volcar) todas las bases de datos PostgreSQL de un clúster en un archivo de script. ... Hace esto llamando pg_dump
a cada base de datos en el clúster. ...
Por ejemplo:
## To dump all databases:
$ pg_dumpall > /tmp/db.out ## backup all postgres databases to file
$ pg_dumpall -Fc dbname > /tmp/outfile ## backup a database
## To reload database(s) from that file:
$ psql -f /tmp/db.out postgres
TL / DR
Necesitas:
pg_dumpall
base de datos export ( )
- crear nuevo directorio VACÍO
- editar el archivo postgresql.conf
- reiniciar el servicio del servidor postgres
- cargar datos antiguos del archivo de volcado en una nueva base de datos
Resumen de comandos
Dejo mis indicaciones de shell (nombre de host ...) para aclarar en qué shell estoy mientras procedo.
[victoria@victoria ~]$ postgres --version ## postgres (PostgreSQL) 11.2
[victoria@victoria claws]$ sudo -u postgres -i
[postgres@victoria ~]$ pg_dumpall > /tmp/db.out
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory; ## /var/lib/postgres/data
[postgres]# exit
[victoria@victoria postgres]$ mkdir /mnt/Vancouver/programming/rdb/postgres/postgresdb
## IMPORTANT: dir must be empty:
[victoria@victoria postgres]$ l postgresdb/ ## total 0
[victoria@victoria postgres]$ sudo chown postgres:root /mnt/Vancouver/programming/rdb/postgres/postgresdb/
[victoria@victoria postgres]$ sudo systemctl status postgresql
...
May 02 19:55:21 victoria systemd[1]: Started PostgreSQL database server.
[postgres@victoria ~]$ initdb --locale en_US.UTF-8 -E UTF8 -D '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[postgres@victoria ~]$ exit
[victoria@victoria postgres]$ sudo vim /var/lib/postgres/data/postgresql.conf
## added line:
data_directory = '/mnt/Vancouver/programming/rdb/postgres/postgresdb/data'
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
## /var/lib/postgres/data ## << Old dir; need to restart postgresql service
[postgres]# \q
[victoria@victoria postgres]$ sudo systemctl restart postgresql
[victoria@victoria postgres]$ sudo -u postgres -i
[postgres@victoria ~]$ psql
[postgres]# SHOW data_directory;
## /mnt/Vancouver/programming/rdb/postgres/postgresdb/data
[postgres]# \q
[postgres@victoria ~]$ psql -f /tmp/db.out postgres
SET
SET
SET
CREATE ROLE
ALTER ROLE
[ ... SNIP! ... ]
[postgres@victoria ~]$ exit
## Done! :-D
Ejemplo
Consulte mi publicación de blog adjunta, Cómo mover una base de datos PostgreSQL existente en Arch Linux , para ver el código comentado y la salida.
Referencias