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" comofsync=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:
-
/^//connect edc/,/^//connect/
limita la búsqueda a ser el alcance de mi base de datos; -
{…}
realizará todos los comandos internos para el rango; -
//susers/(/s/|$/)/
coincide con todas las líneas conusers
por sí mismo, incluso al final de la línea; -
/;/|///./
coincide con líneas con;
o que contenga/.
-
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