Recuperar la base de datos PostgreSQL desde la copia de seguridad del sistema de archivos

Recuperar la base de datos PostgreSQL desde la copia de seguridad del sistema de archivos

Tengo una copia de seguridad del directorio de datos de PostgreSQL 8.3. Necesito copiar una base de datos de esta copia de seguridad en una nueva instancia de PostgreSQL. Por problemas con el servidor antiguo no puedo hacer un pg_dump de la base de datos.

He descubierto qué directorio es para la base de datos en cuestión. En MySQL, por ejemplo, todo lo que normalmente haría es apagar el servidor, copiar el directorio y reiniciarlo y la base de datos estará disponible. Ahora bien, esto no funciona con PostgreSQL y sospecho que se debe a que la base de datos no figura en el archivo global/pg_database. Este archivo parece generarse automáticamente cuando se inicia PostgreSQL, entonces, ¿cómo le digo al sistema que la base de datos está allí?

Respuesta1

Tenga en cuenta que en PostgreSQL, el directorio de datos de su clúster es una unidad autónoma que no se puede restaurar de manera confiable en partes, según la documentación.aquí.

Su mejor esperanza es utilizar el directorio de datos completo del servidor antiguo e iniciar un servidor en él, luego restaurar desde un volcado de la base de datos que obtiene desde allí:

  1. Obtenga un postgresql.conf que se ajuste a la configuración del nuevo host (orientese por los archivos en los directorios de datos antiguos, que puede cambiar aquí, y en los nuevos)
  2. Descubra el nombre de usuario del superusuario de PostgreSQL de la instalación anterior (muy probablemente postgres).
  3. Cree este nombre de usuario (usuario UNIX) en el nuevo host, a menos que ya esté allí.
  4. Proporcione (chown) el directorio de datos anterior a ese usuario, a menos que el uid coincida con el del servidor anterior.
  5. Configure pg_hba.conf en el directorio de datos antiguo para permitir conexiones de usuarios locales con el mismo nombre de usuario de Postgres (este suele ser el valor predeterminado, pero verifíquelo).
  6. Ejecute el antiguo clúster de base de datos como usuario UNIX con el mismo nombre que el superusuario del directorio de datos antiguo, por ejemplo, para el usuario postgres:
    sudo -u postgres postgres -D old_data_directory
    # or with su:
    su postgres
    postgres -D old_data_directory
    
  7. volcar la base de datos antigua, nuevamente con el nombre de usuario habitual, postgres:
    sudo -u postgres pg_dump -p /path/to/socket/for/old/directory database_name > dump_file.sql
    # becoming postgres with su analogous to above
    
  8. adapte dump_file.sql a los nombres de usuario del nuevo servidor, etc.; cree la base de datos vacía con la propiedad adecuada allí
  9. escanee la base de datos en el nuevo servidor:
    sudo -u postgres psql -p /path/to/socket/for/new/directory new_database_name
    # once again, getting postgres privileges using su analogous to above
    

Eso debería ayudarte a prepararte, o al menos mostrarte un buen camino para llegar allí.

información relacionada