¿Restaurar un archivo de respaldo de postgres usando la línea de comando?

294

Soy nuevo en postgresql, y localmente, uso pgadmin3. En el servidor remoto, sin embargo, no tengo ese lujo.

Ya he creado la copia de seguridad de la base de datos y la he copiado, pero, ¿hay alguna forma de restaurar una copia de seguridad desde la línea de comandos? Solo veo cosas relacionadas con la GUI o con pg_dumps, así que, si alguien me puede decir cómo hacerlo, ¡sería genial!

TwixxyKit
fuente

Respuestas:

365

Hay dos herramientas para ver, dependiendo de cómo creó el archivo de volcado.

Su primera fuente de referencia debería ser la página de manual, pg_dump(1)ya que eso es lo que crea el volcado en sí. Dice:

Los volcados se pueden generar en formatos de script o archivo de archivo. Los volcados de secuencias de comandos son archivos de texto sin formato que contienen los comandos SQL necesarios para reconstruir la base de datos al estado en que se encontraba en el momento en que se guardó. Para restaurar desde dicho script, aliméntelo a psql (1). Los archivos de script se pueden usar para reconstruir la base de datos incluso en otras máquinas y otras arquitecturas; con algunas modificaciones incluso en otros productos de bases de datos SQL.

Los formatos alternativos de archivo deben usarse con pg_restore (1) para reconstruir la base de datos. Permiten que pg_restore sea selectivo sobre lo que se restaura, o incluso reordenar los elementos antes de ser restaurado. Los formatos de archivo de almacenamiento están diseñados para ser portátiles en todas las arquitecturas.

Entonces depende de la forma en que fue arrojado. Probablemente pueda resolverlo usando el excelente file(1)comando: si menciona texto ASCII y / o SQL, debería restaurarse con, de lo psqlcontrario, probablemente debería usarpg_restore

Restaurar es bastante fácil:

psql -U username -d dbname < filename.sql

-- For Postgres versions 9.0 or earlier
psql -U username -d dbname -1 -f filename.sql

o

pg_restore -U username -d dbname -1 filename.dump

Consulte sus respectivas páginas de manual: hay varias opciones que afectan el funcionamiento de la restauración. Puede que tenga que limpiar sus bases de datos "en vivo" o volver a crearlas desde template0 (como se señala en un comentario) antes de restaurar, dependiendo de cómo se generaron los volcados.

Steven Schlansker
fuente
3
IME prácticamente siempre desea restaurar en una base de datos que se ha creado recientemente desde template0. De lo contrario, si ha hecho algo como activar plpgsql en template1, el proceso de restauración intentará hacerlo nuevamente, y el cambio -1 que sugiere significa que toda la transacción fallará. Entonces, algo como "createdb -T template0 seo2" seguido de "pg_restore -v -d seo2 seo.pg" para restaurar seo.pg (hecho desde la base de datos seo) en una nueva base de datos seo2. Si su archivo de copia de seguridad es solo un archivo .sql, puede recortar fragmentos conflictivos a mano.
araqnid
61
No puedes tener -dy -fal mismo tiempo. pg_restore: options -d/--dbname and -f/--file cannot be used together
CppLearner
8
En la versión 9.2, la opción "-f" especifica un archivo de salida, no el archivo de volcado (y probablemente significa lo mismo en versiones anteriores).
David Resnick
44
Al respecto cannot be used together, vea aquí: stackoverflow.com/questions/27882070/…
Abdull
3
@ Alex78191 significa que se ejecuta como una sola transacción, que podría fallar por completo y revertirse, o pasar. También bloqueará cierto acceso a la base de datos.
ATN
216

crear copia de seguridad

pg_dump -h localhost -p 5432 -U postgres -F c -b -v -f 
"/usr/local/backup/10.70.0.61.backup" old_db

-F c es un formato personalizado (comprimido y capaz de hacerlo en paralelo con -j N) -b incluye blobs, -v es detallado, -f es el nombre del archivo de respaldo

Reinstalar desde el respaldo

pg_restore -h localhost -p 5432 -U postgres -d old_db -v 
"/usr/local/backup/10.70.0.61.backup"

importante establecer -h localhost - opción

piloto
fuente
2
Me gustaría mencionar que antes de ejecutar estos comandos, debe ubicarse en la carpeta bin de Posgresql . Por ejemplo, en Windows (si lo instaló en la carpeta predeterminada) sería C: \ Archivos de programa \ PostgreSQL \ 9.6 \ bin
juan_carlos_yl
90

Es posible que deba iniciar sesión como postgrespara tener privilegios completos en las bases de datos.

su - postgres
psql -l                      # will list all databases on Postgres cluster

pg_dump / pg_restore

  pg_dump -U username -f backup.dump database_name -Fc 

cambiar -Fespecificar formato de archivo de copia de seguridad:

  • c utilizará el formato personalizado PostgreSQL que está comprimido y da como resultado el tamaño de archivo de copia de seguridad más pequeño
  • d para el directorio donde cada archivo es una tabla
  • t para archivo TAR (más grande que el formato personalizado)
  • -h/ --hostEspecifica el nombre de host de la máquina en la que se ejecuta el servidor
  • -W/ --passwordForzar pg_dumpa solicitar una contraseña antes de conectarse a una base de datos

Restaurar copia de seguridad:

   pg_restore -d database_name -U username -C backup.dump

El parámetro -Cdebe crear una base de datos antes de importar datos. Si no funciona, siempre puede crear una base de datos, por ejemplo. con comando (como usuario postgresu otra cuenta que tiene derechos para crear bases de datos)createdb db_name -O owner

pg_dump / psql

En caso de que no haya especificado el argumento -F, se utilizó el formato predeterminado de texto sin formato SQL (o con -F p). Entonces no puedes usar pg_restore. Puede importar datos con psql.

apoyo:

pg_dump -U username -f backup.sql database_name

restaurar:

psql -d database_name -f backup.sql
Tombart
fuente
Usé el comando "psql -d database_name -f backup.sql" para restaurar una base de datos que descargué de dokku en DigitalOcean. Funcionó muy bien.
NineBlindEyes
1
mientras usa psql si su usuario (por ejemplo postgres) tiene una contraseña establecida, entonces se -Wdebe usar la opción. Por ejemplo, en Ubuntu sin hacer su postgresnada desde la terminal $ psql -h localhost -U postgres -W -d DB_NAME < DB_BACKUP.sqles el comando que funcionó para mí para restaurar mi copia de seguridad en mi host local. Tenga en cuenta que -hse necesita la opción.
Jignesh Gohel
@JiggneshhGohel Como dice el manual: la -Wopción nunca es esencial. pg_dumpsolicitará automáticamente una contraseña si el servidor requiere autenticación de contraseña. También puede usar la PGPASSWORDvariable env, si está usando contraseñas de texto sin formato. -hes necesario si el valor predeterminado PGHOSTno es aplicable. Estas opciones son comunes para muchas utilidades de PostgreSQL, por lo que no son esenciales para responder esta pregunta (depende en gran medida de su configuración).
Tombart
@Tombart tu segunda pg_dump/psqlparte de la opción es trabajo para mí. pero la primera parte pg_dump/pg_restoreno es trabajo para mí para restaurar. Gracias.
Anjan Biswas
@AnjanBiswas La primera opción es utilizar el archivo comprimido, que necesitará más CPU pero el archivo de copia de seguridad ocupará menos espacio en el disco. Solo necesita elegir la compresión adecuada, por ejemplo-Fc
Tombart
60

POSTGRESQL 9.1.12

TUGURIO:

pg_dump -U user db_name > archive_name.sql

ingrese la contraseña de usuario y presione enter.

RESTAURAR:

psql -U user db_name < /directory/archive.sql

ingrese la contraseña de usuario y presione enter.

Natan Medeiros
fuente
31

A continuación se muestra mi versión pg_dumpque uso para restaurar la base de datos:

pg_restore -h localhost -p 5432 -U postgres -d my_new_database my_old_database.backup

o usar psql:

psql -h localhost -U postgres -p 5432 my_new_database < my_old_database.backup

donde -hhost, -ppuerto, -unombre de usuario de inicio de sesión, -dnombre de la base de datos

Yahor M
fuente
2
Govind Singh, ¿por qué editaste mi respuesta? sus cambios no traen nada nuevo ..
Yahor M
1
my_new_databaseya debería existir al usar psql, ¿no?
Elmex80s
22

Copia de seguridad y restauración con GZIP

Para bases de datos de mayor tamaño, esto es muy bueno

apoyo

pg_dump -U user -d mydb | gzip > mydb.pgsql.gz

restaurar

gunzip -c mydb.pgsql.gz | psql dbname -U user

https://www.postgresql.org/docs/9.1/static/backup-dump.html

Sarath Ak
fuente
1
Para ubuntu, podría usar: gunzip -c mydb.pgsql.gz | sudo -u postgres psqlPara obtener los permisos para operar en la base de datos. También --cleantenga en cuenta la bandera al volcar, que borrará todos los datos existentes, podría ser útil.
Sebastian
Trabajo excelente y una solución ordenada para mí. ¡Gracias!
Nam G VU
11
Backup:  $ pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}

Restore: $ psql -U {user-name} -d {desintation_db} -f {dumpfilename.sql}
Aaron Lelevier
fuente
8

Esto funcionó para mí:

pg_restore --verbose --clean --no-acl --no-owner --host=localhost --dbname=db_name --username=username latest.dump
Franz
fuente
Gracias, --no-ownerrealmente me ayudó.
bonafernando
7

1. Abra la terminal.

2. respalde su base de datos con el siguiente comando

su bin de postgres - /opt/PostgreSQL/9.1/bin/

su servidor de base de datos de origen - 192.168.1.111

la ubicación y el nombre de su archivo de respaldo - /home/dinesh/db/mydb.backup

su nombre de base de datos - mydatabase

/opt/PostgreSQL/9.1/bin/pg_dump --host '192.168.1.111' --port 5432 --username "postgres" --no-password --format custom --blobs --file "/ home / dinesh / db /mydb.backup "" mydatabase "

3. restaure el archivo mydb.backup en el destino.

su servidor de destino - localhost

el nombre de su base de datos de destino - mydatabase

crear una base de datos para restaurar la copia de seguridad.

/opt/PostgreSQL/9.1/bin/psql -h 'localhost' -p 5432 -U postgres -c "CREAR BASE DE DATOS mydatabase"

Restaurar la copia de seguridad.

/opt/PostgreSQL/9.1/bin/pg_restore --host 'localhost' --port 5432 --username "postgres" --dbname "mydatabase" --no-password --clean "/ home / dinesh / db / mydb. apoyo"

Dinesh-SriLanka
fuente
4

Si crea una copia de seguridad utilizando pg_dump, puede restaurarla fácilmente de la siguiente manera:

  1. Abrir ventana de línea de comando
  2. Vaya a la carpeta bin de Postgres. Por ejemplo: cd "C:\ProgramFiles\PostgreSQL\9.5\bin"
  3. Ingrese el comando para restaurar su base de datos. For example: psql.exe -U postgres -d YourDatabase -f D:\Backup\.sql
  4. Escriba la contraseña para su usuario de postgres
  5. Comprueba el proceso de restauración

fuente
4

1) Abra el terminal psql.

2) Descomprima / descomprima el archivo de volcado.

3) Crear una base de datos vacía.

4) use el siguiente comando para restaurar el archivo .dump

<database_name>-# \i <path_to_.dump_file>
Vaibhav Desai
fuente
4

prueba esto:

psql -U <username> -d <dbname> -f <filename>.sql

Restaurar DB psql del archivo .sql

Faysal Maqsood
fuente
psql -U <nombre de usuario> -d <dbname> -f <nombre de archivo> .sql
Faysal Maqsood
3

tratar:

pg_restore -h localhost -p 5432 -U <username> -d <dbname> -1 <filename>
Cristhian Gonzalez
fuente
2

La restauración de un archivo de copia de seguridad de Postgres depende de cómo tomó la copia de seguridad en primer lugar.

Si usó pg_dump con -F c o -F d, debe usar pg_restore; de ​​lo contrario, puede usar

psql -h localhost -p 5432 -U postgres <archivo de respaldo

9 formas de hacer copias de seguridad y restaurar bases de datos postgres

Prashant Kumar
fuente
¿Te das cuenta de que te perdiste la parte del nombre de la base de datos y se quejará de que la base de datos de destino no existe?
Pere
2

Intente ver si los siguientes comandos pueden ayudarlo:

sudo su - yourdbuser
psql
\i yourbackupfile
Mehmet Ali
fuente
2

Perdón por el necropost, pero estas soluciones no me funcionaron. Estoy en Postgres 10. En Linux:

  1. Tuve que cambiar el directorio a mi pg_hba.conf.
  2. Tuve que editar el archivo para cambiar el método de igual a md5 como se indica aquí
  3. Reiniciar el servicio: service postgresql-10 restart
  4. Cambie el directorio a donde estaba ubicado mi backup.sql y ejecute:
    psql postgres -d database_name -1 -f backup.sql

    -database_name es el nombre de mi base de datos

    -backup.sql es el nombre de mi archivo de copia de seguridad .sql.

Tim
fuente
1

Estaba teniendo problemas de autenticación al ejecutar pg_dump, así que moví mi archivo de volcado

mv database_dump /tmp

en el directorio temporal y luego ejecutó

su -u postgres
cd /tmp
pg_restore database_dump

Si tiene un volcado de base de datos grande, es posible que solo desee crear otro directorio donde su usuario actual y el usuario de postgres puedan acceder y colocar el archivo de volcado de la base de datos en eso.

usuario1876508
fuente
1

Si tiene un archivo SQL de respaldo, puede restaurarlo fácilmente. Simplemente siga las instrucciones que se dan a continuación.

1. At first, create a database using pgAdmin or whatever you want (for example my_db is our created db name)
2. Now Open command line window
3. Go to Postgres bin folder. For example:  cd "C:\ProgramFiles\PostgreSQL\pg10\bin"
4. Enter the following command to restore your database: psql.exe -U postgres -d my_db -f D:\Backup\backup_file_name.sql 

Escriba la contraseña para su usuario de Postgres si es necesario y deje que Postgres haga su trabajo. Luego puede verificar el proceso de restauración.

Omar
fuente
0

Si desea hacer una copia de seguridad de sus datos o restaurarlos desde una copia de seguridad, puede ejecutar los siguientes comandos:

  1. Para crear una copia de seguridad de sus datos, vaya a su directorio postgres \ bin \ like C:\programfiles\postgres\10\bin\y luego escriba el siguiente comando:

    pg_dump -FC -U ngb -d ngb -p 5432 >C:\BACK_UP\ngb.090718_after_readUpload.backup
  2. Para restaurar los datos de una copia de seguridad, vaya a su directorio postgres \ bin \ like C:\programfiles\postgres\10\bin\y luego escriba el siguiente comando:

    C:\programFiles\postgres\10\bin> pg_restore -Fc -U ngb -d ngb -p 5432 <C:\ngb.130918.backup

    Asegúrese de que exista el archivo de copia de seguridad.

Girjesh Kumar Suryawanshi
fuente
-3

Ver abajo ejemplo está funcionando

C: / Archivos de programa / PostgreSQL / 9.4 / bin \ pg_restore.exe --host localhost --port 5432 --username "postgres" --dbname "newDatabase" --no-password --verbose

" C: \ Users \ Yogesh \ Downloads \ new Download \ DB.backup "

usuario3881346
fuente