Cómo obtener una copia de seguridad y prueba de PostgreSQL DB que funcione y complete

45

Esperaba poder obtener una respuesta clara sobre cómo garantizar una copia de seguridad completa de Postgres como lo haría con MS SQL Server, y luego cuidar a los usuarios huérfanos.

Por lo que he leído, y podría estar equivocado, encontrar un buen blog de PostgreSQL ha sido un desafío, así que no dude en recomendarme algunos, necesito averiguar cómo funciona esta aplicación para poder confiar en mis copias de seguridad y Slony replicación. Hice que un desarrollador restaurara una copia de seguridad que tomé de PgadminIII a través de custom, directoryy tarformatee mientras seleccionaba OID, pero dijo que dos de ellos no se cargaron, lo tarhicieron pero era solo el directorio, no los datos. Estoy realmente confundido ahora.

  1. Estoy usando pgAdminIII, tiene una pg_dumpy la pg_dumpallopción. Quiero hacer una copia de seguridad de todo lo que necesito para probar restaurar esta base de datos en algún lugar y verificar que sí, todos los datos que necesitamos y nuestra copia de seguridad son buenos. Finalmente, quiero escribir un script de restauración automática, pero un día a la vez.

pg_dumpallaparentemente tiene una -globalsopción que se supone que debe respaldar todo, pero la ayuda para pg_dumpallmuestra una -g, --globals-only dump only global objects, no databases, no una --globalsopción.

Pensé pg_dumpallque al menos haría una copia de seguridad de claves externas, pero incluso eso parece ser una 'opción'. De acuerdo con la documentación , incluso pg_dumpallsi necesito usar una -oopción para hacer una copia de seguridad de claves externas, realmente no puedo imaginar cuándo no querría hacer una copia de seguridad de las claves externas y esto tendría más sentido como opciones predeterminadas.

  1. ¿Cómo me ocuparía de los usuarios huérfanos y validaría que tengo todo? Me gustaría restaurar mi archivo de copia de seguridad en otro servidor y verificar que todo funcione. Si alguien tiene alguna sugerencia sobre cómo hacer una copia de seguridad real en PostgreSQL y restaurar, estaría muy agradecido.

¡Tenía un servidor PostgreSQL pero todavía no puedo entender por qué la aplicación no hacía una copia de seguridad OIDpor defecto! Parece que el 99.9% de las veces te gustaría eso.

ACTUALIZACIÓN 1:

La documentación de Postgres menciona que la globalsopción que estaba buscando parece ser una opción predeterminada en esta versión, pero aún necesita la -oopción. Si alguien puede verificar o darme un comando de ejemplo para restaurar una sola base de datos en otro lugar con todo lo que necesita, lo agradecería.

Editar: el sitio me pide que muestre la singularidad de esta pregunta editando mi pregunta. Esta pregunta plantea el problema y obtiene claridad sobre los OID en las copias de seguridad, la diferencia entre globales y no globales, así como las pruebas restauran las recomendaciones para garantizar que la copia de seguridad sea buena en lugar de simplemente hacer una copia de seguridad. Debido a las respuestas, pude hacer una copia de seguridad, descifrar globales / oids e iniciar un proceso de restauración de prueba todas las noches en Postgres usando trabajos cron. ¡Gracias por la ayuda!

Ali Razeghi
fuente
Posible duplicado de la copia de seguridad completa
raphael

Respuestas:

58

Puede volcar todo el clúster PostgreSQL con pg_dumpall. Esas son todas las bases de datos y todas las globales para un solo clúster. Desde la línea de comandos en el servidor, haría algo como esto. (El mío está escuchando en el puerto 5433, no en el puerto predeterminado). Puede que necesite o no la opción --clean.

$ pg_dumpall -U postgres -h localhost -p 5433 --clean --file=dump.sql

Esto incluye los globales: información sobre usuarios y grupos, espacios de tablas, etc.

Si tuviera que hacer una copia de seguridad de una sola base de datos y moverla a un servidor reutilizable, volcaría la base de datos con pg_dump y volcaría los globales con

  • pg_dumpall --globals-onlyo
  • pg_dumpall --roles-only (si solo necesitas roles)

Me gusta esto.

$ pg_dump -U postgres -h localhost -p 5433 --clean --file=sandbox.sql sandbox
$ pg_dumpall -U postgres -h localhost -p 5433 --clean --globals-only --file=globals.sql

Las salidas son solo archivos de texto.

Después de mover estos archivos a un servidor diferente, cargue primero los globales y luego el volcado de la base de datos.

$ psql -U postgres -h localhost -p 5433 < globals.sql
$ psql -U postgres -h localhost -p 5433 < sandbox.sql

Pensé que pg_dumpall al menos haría una copia de seguridad de claves externas, pero incluso eso parece ser una 'opción'. De acuerdo con: http://www.postgresql.org/docs/9.1/static/app-pg-dumpall.html, incluso con pg_dumpall, necesito usar una opción -o para hacer una copia de seguridad de las claves externas

No, esa referencia dice "Use esta opción si su aplicación hace referencia a las columnas OID de alguna manera (por ejemplo, en una restricción de clave foránea). De lo contrario, esta opción no debería usarse". (Énfasis agregado.) Creo que es poco probable que su aplicación haga referencia a las columnas OID. No necesita usar esta opción para "hacer una copia de seguridad de claves externas". (Lea el archivo de volcado en su editor o visor de archivos).

Mike Sherrill 'Retiro del gato'
fuente
3
¿No falta el nombre de la base de datos en la línea donde se está importando sandbox.sql? psql -U postgres -h localhost -p 5433 sandbox < sandbox.sql
SebK
Se ve que pg_dumpall, la versión 9.5, no funciona correctamente con NULLvalores cuando se usa COPY. Recibo muchos errores como este: psql:/tmp/dumpall.sql:4133559: invalid command \N psql:/tmp/dumpall.sql:4133560: invalid command \.al importar de nuevo a Postgres 10 usandopsql -f /tmp/dumpall.sql
piotrekkr