Mover datos postgresql a una unidad diferente

20

Estoy usando AWS como mi entorno de nube. Instalé PostgreSQL en la misma unidad que mi volumen de instancia raíz. He adjuntado y montado la segunda unidad a mi instancia. Ahora quiero mover todos mis datos de PostgreSQL a la unidad diferente. Todavía estoy en modo de desarrollo, por lo que puedo eliminar los datos antiguos si facilita la transferencia en este momento. ¿Cuál es la mejor manera de hacer esto?

¿Es el espacio de tabla PostgreSQL algo que debería mirar?

codecool
fuente
1
Los espacios de tabla serían el camino a seguir si desea mover parte de sus bases de datos a una unidad separada.
Erwin Brandstetter
Esta respuesta sugiere que NOtablespaces debería ir en un disco duro externo: dba.stackexchange.com/a/62037/41823 ¿ No estoy seguro de entender el riesgo si ya está poniendo los datos en un externo?
Statwonk

Respuestas:

19

Lo siguiente debería hacerlo:

  1. Cierre PostgreSQL
  2. Asegúrese de que PostgreSQL ya no se ejecute
  3. Verifique que PostgreSQL esté realmente detenido
  4. Copie el antiguo directorio de datos en la nueva unidad.
    Esto generalmente se define mediante un parámetro de línea de comandos ( -D) para su servicio o mediante la PGDATAvariable de entorno.
  5. Actualice su configuración de PostgreSQL (servicio, entorno var) para que apunte al nuevo directorio de datos.
  6. Si copió los datos, cambie el nombre del antiguo directorio de datos para asegurarse de que PostgreSQL ya no pueda encontrarlo. De esa forma, recibirá un mensaje de error si no realizó la configuración correcta.
  7. Inicia el servicio
  8. Si todo funciona bien, puede eliminar el directorio anterior.
un caballo sin nombre
fuente
En el cuarto punto, ¿qué quieres decir con 'Esto generalmente se define a través de un parámetro de línea de comando ...'
codecool
@codecool: hay varias formas diferentes de cómo se podría definir esto. Por lo general , es parte de la definición del servicio. Pero depende de su sistema operativo, distribución y cambios personales.
a_horse_with_no_name
Esto funcionó pero utilicé el regedit en lugar de la línea de comando para Windows. Uf. Mi disco estaba a punto de quedarse sin espacio, pero ahora lo tengo operando de manera segura en otro lugar con suficiente espacio.
trinchera
Aquí hay una buena publicación de blog paso a paso con detalles específicos, actualizada para la versión típica de ubuntu y 9.5 DB: digitalocean.com/community/tutorials/…
JaakL
4
  1. Detener el servicio postgresql
  2. cp -a directorio_datos_origen directorio_datos_destino
  3. chown -R postgres_user / destination_data_directory
  4. export PGDATA = destination_data_directory
  5. Cambiar el directorio de datos a directorio_datos_de_destino dentro de postgresql.conf
  6. pg_ctl start
adi
fuente
Me alegra que haya recordado el chowncomando para la nueva carpeta.
RolandoMySQLDBA
0

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_dumpalles una utilidad para escribir (volcar) todas las bases de datos PostgreSQL de un clúster en un archivo de script. ... Hace esto llamando pg_dumpa 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_dumpallbase 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

Victoria Stuart
fuente