una ruta recuperar postgres por pg_dump las guardar guardan exportar ejemplos donde desde datos data consola como carpeta cambiar bases database postgresql file recover

database - ruta - Recuperar bases de datos postgreSQL de archivos físicos en bruto



recuperar base de datos postgresql 9.4 desde carpeta data (4)

Tengo el siguiente problema y necesito saber si hay alguna manera de solucionarlo.

Tengo un cliente que fue lo suficientemente barato como para rechazar la compra de un plan de respaldo para sus bases de datos postgreSQL en el sistema principal que ejecuta su empresa y, como pensé que sucedería algún día, algunos archivos del SO se bloquearon durante un apagón y el SO debe volver a instalarse .

Este cliente no tenía ninguna copia de seguridad de las bases de datos, pero logré guardar el directorio principal de PostgreSQL. Leí que las bases de datos se almacenan de alguna manera dentro del directorio de datos de la carpeta principal de postgres.

Mi pregunta es: ¿hay alguna forma de recuperar las bases de datos solo desde la carpeta de datos? Estoy trabajando en un entorno Windows (XP service pack 2) con PostgreSQL 8.2 y necesito reinstalar PostgreSQL en un nuevo servidor. Necesitaría volver a crear las bases de datos en el nuevo entorno y, de alguna manera, adjuntar los archivos antiguos a las nuevas instancias de la base de datos. Sé que eso es posible en SQL Server debido a la forma en que el motor almacena las bases de datos, pero no tengo ninguna pista en postgres.

¿Algunas ideas? Ellos serían muy apreciados.


Esto es posible, solo necesita copiar la carpeta de "datos" (dentro de la carpeta de instalación de Postgres) de la computadora antigua a la nueva, pero hay algunas cosas que debe tener en cuenta.

Primero, antes de copiar los archivos, debe detener el servicio del servidor de Postgres. Entonces, Panel de control-> Herramientas administrativas-> Servicios, encuentre el servicio de Postgres y deténgalo. Cuando haya terminado de copiar los archivos y configurar los permisos, vuelva a iniciarlo.

En segundo lugar, debe establecer los permisos para los archivos de datos. Debido a que el servidor de Postgres realmente se ejecuta en otra cuenta de usuario, no podrá acceder a los archivos si los copia en la carpeta de datos, ya que no tendrá permisos para hacerlo. Por lo tanto, debe cambiar la propiedad de los archivos al usuario "postgres". Tuve que usar subinacl para esto, instálelo primero y luego utilícelo desde el símbolo del sistema como este (primero navegue a la carpeta donde lo instaló):

subinacl /subdirectories "C:/Program Files/PostgreSQL/8.2/data/*" /setowner=postgres

(También se puede hacer un cambio de propietario desde el explorador: primero debe deshabilitar "Usar el uso compartido simple de archivos" en las opciones de Carpeta, luego aparecerá la pestaña "Seguridad" en el cuadro de diálogo de Propiedades de la carpeta, y hay opciones para configurar permisos y cambio de propietario, pero no pude hacerlo de esa manera.)

Ahora, si el servicio del servidor no se puede iniciar después de volver a iniciarlo manualmente, generalmente puede ver el motivo en el Visor de eventos (Herramientas administrativas -> Visor de eventos). Postgres lanzará un evento de error, e inspeccionarlo le dará una pista sobre cuál es el problema (a veces se quejará de un archivo postmaster.pid, simplemente elimínelo, etc.).


La pregunta es muy antigua, pero quiero compartir un método efectivo que encontré.

Si no tiene una copia de seguridad con "pg_dump" y su información antigua es una carpeta, intente los siguientes pasos. En la base de datos de Postgres, agregue registros a la tabla "pg_database". Con un programa gestor o "insertar en". Realice la comprobación necesaria y cambie la siguiente consulta de inserción y ejecútela.

La consulta devolverá un OID después de que haya funcionado. Crea una carpeta con el nombre de este número. Una vez que haya copiado sus datos antiguos en esta carpeta, el uso ya está listo.

/* ------------------------------------------ *** Recover From Folder *** ------------------------------------------ Check this table on your own system. Change the differences below. */ INSERT INTO pg_catalog.pg_catalog( datname, datdba, encoding, datcollate, datctype, datistemplate, datallowconn, datconnlimit, datlastsysoid, datfrozenxid, datminmxid, dattablespace, datacl) VALUES( -- Write Your collation ''NewDBname'', 10, 6, ''Turkish_Turkey.1254'', ''Turkish_Turkey.1254'', False, True, -1, 12400, ''536'', ''1'', 1663, Null); /* Create a folder in the Data directory under the name below New OID. All old backup files in the directory "data/base/Old OID" are the directory with the new OID number Copy. The database is now ready for use. */ select oid from pg_database a where a.datname = ''NewDBname'';


Lo hago pero la parte más difícil fue cambiar el permiso del propietario:

  1. Ir a servicios desde herramientas administrativas.
  2. Encuentra el servicio de postgres y haz doble clic en él.
  3. al iniciar sesión en la pestaña cambiar al sistema local
  4. luego reiniciar

Si tiene toda la carpeta de datos, tiene todo lo que necesita (siempre que la arquitectura sea la misma). Solo intente restaurarlo en otra máquina antes de eliminar esta, en caso de que no haya copiado algo.

Solo guarda el directorio de datos en el disco. Cuando inicie Postgres, configure el parámetro que le dice dónde está el directorio de datos (consulte: wiki.postgresql.org ). O elimine el directorio de datos originales de la instalación nueva y coloque la copia en su lugar.