versión soportada restaurar respaldos postgres pg_restore pg_dump hacer example encabezado datos crear consola como archivo archiver postgresql sed postgresql-9.1

postgresql - restaurar - pg_restore:[archiver] versión no soportada(1.13) en el encabezado del archivo



¿Cómo restaurar una sola tabla desde una copia de seguridad.sql postgresql? (5)

No haga copias de seguridad de SQL si necesita restauración de tabla única, etc. Utilice la opción -Fc , el formato "personalizado". Esto se puede restaurar usando pg_restore . La restauración selectiva es posible, al igual que todo tipo de otras funciones útiles. pg_restore puede convertir un volcado de formato personalizado en un volcado de SQL más adelante si lo necesita.

Si está atascado con un volcado existente, sus únicas opciones son:

  • Use un editor de texto para extraer los datos de la tabla de destino a un archivo separado y simplemente restaure eso; o

  • Restaure el volcado a una base de datos desechable y luego use pg_dump para realizar un volcado selectivo que incluya solo esa tabla. Como es desechable, puedes usar una instancia de Pg separada en una máquina no segura pero no cargada en la que activas todas las opciones "hacerlo rápido pero come mis datos si quieres" como fsync=off . NUNCA debes configurar eso en producción.

Las filas de una tabla se borraron por error de la base de datos. Tenemos una copia de seguridad de db que da como resultado un archivo sql que puede restaurarse así:

psql -h localhost -d proddump -f /Users/U/Desktop/prod_db_backup/PostgreSQL/site_prod.sql

Esto termina haciendo una restauración completa localmente. Pero lo que necesitamos es restaurar las filas de una sola tabla a la producción. ¿Algún consejo sobre cómo hacer que esto funcione con PostgreSQL 9.1?

Gracias


Por casualidad tengo pg_dumpall dump around. Y me gustaría restaurar los users nombrados de la tabla de la base de datos llamada edc , ya que es muy probable que tenga tablas igualmente nombradas en diferentes bases de datos e incluso esquemas.

Para mi caso, el siguiente sed delineador de ojos funciona:

sed -ne ''/^//connect edc/,/^//connect/{//susers/(/s/|$/)/,/;/|///./p}'' pg92.dump

Que hace:

  1. /^//connect edc/,/^//connect/ limita la búsqueda a ser el alcance de mi base de datos;
  2. {…} realizará todos los comandos internos para el rango;
  3. //susers/(/s/|$/)/ coincide con todas las líneas con users por sí mismo, incluso al final de la línea;
  4. /;/|///./ coincide con líneas con ; o que contenga /.
  5. p obliga a que se generen las líneas correspondientes (tenga en cuenta que sed se invoca con -n ).

Dependiendo de la complejidad de sus datos, es posible que deba modificar esto.

Todo lo que tiene que hacer es psql la salida sed al comando psql con los interruptores a la derecha.


Puedes usar grep + sed en roder para obtener datos de la tabla:

Primero, necesitas identificar los límites:

$ fgrep -Ehn ''^(COPY |CREATE TABLE )'' db.sql 49:CREATE TABLE test ( 60:CREATE TABLE test2 ( 71:CREATE TABLE test3 ( 82:COPY test (i) FROM stdin; 100090:COPY test2 (i) FROM stdin; 200098:COPY test3 (i) FROM stdin;

Para extraer datos para la tabla test2:

sed -n ''100090,200097p'' < db.sql | sed -e ''s/^COPY test2/COPY new_table_name/'' > new_table_name.sql

Tenga en cuenta que debe restar uno del segundo número (es decir, excluir la próxima copia de stmt)

Ahora puede cargar new_table_name.sql y restaurar los datos que necesita. Ahora, puedes cargar datos en una nueva tabla


Hay una manera fácil.

''pg_restore'' tiene una opción ''--table / -t''.

pg_restore -a -t your_table /path/to/dump.sql

Use ''-h'' para el host remoto. Vea otras opciones aquí


No estoy al tanto de ninguna herramienta para esto, pero esta my_backup.sql extrae la my_backup.sql precious_table del archivo my_backup.sql :

sed -n ''/^COPY precious_table /,/^///.$/p'' my_backup.sql