Ripristinare un file di backup postgres usando la riga di comando?


294

Sono nuovo di postgresql e localmente uso pgadmin3. Sul server remoto, tuttavia, non ho tale lusso.

Ho già creato il backup del database e l'ho copiato, ma c'è un modo per ripristinare un backup dalla riga di comando? Vedo solo cose relative alla GUI o a pg_dumps, quindi, se qualcuno può dirmi come procedere, sarebbe fantastico!

Risposte:


365

Esistono due strumenti da esaminare, a seconda di come è stato creato il file di dump.

La tua prima fonte di riferimento dovrebbe essere la pagina man in pg_dump(1)quanto è ciò che crea il dump stesso. Dice:

I dump possono essere emessi in formati di script o file di archivio. I dump degli script sono file di testo semplice contenenti i comandi SQL richiesti per ricostruire il database allo stato in cui si trovava al momento del salvataggio. Per ripristinare da un tale script, alimentalo in psql (1). I file di script possono essere utilizzati per ricostruire il database anche su altre macchine e altre architetture; con alcune modifiche anche su altri prodotti di database SQL.

I formati di file di archivio alternativi devono essere utilizzati con pg_restore (1) per ricostruire il database. Consentono a pg_restore di essere selettivo su ciò che viene ripristinato o addirittura di riordinare gli elementi prima di ripristinarli. I formati di file di archivio sono progettati per essere portatili su più architetture.

Quindi dipende dal modo in cui è stato scaricato. Probabilmente puoi capirlo usando l'eccellente file(1)comando - se menziona testo ASCII e / o SQL, dovrebbe essere ripristinato con psqlaltrimenti dovresti probabilmente usarepg_restore

Il ripristino è piuttosto semplice:

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

Dai un'occhiata alle rispettive manpage: ci sono alcune opzioni che influenzano il funzionamento del ripristino. Potrebbe essere necessario ripulire i database "attivi" o ricrearli da template0 (come sottolineato in un commento) prima di ripristinare, a seconda di come sono stati generati i dump.


3
IME che vuoi sempre praticamente ripristinare in un database che è stato appena creato da template0. Altrimenti se hai fatto qualcosa come l'attivazione di plpgsql in template1, il processo di ripristino proverà a farlo di nuovo, e l'opzione -1 che suggerisci significa che l'intera transazione fallirà. Quindi qualcosa come "Createdb -T template0 seo2" seguito da "pg_restore -v -d seo2 seo.pg" per ripristinare seo.pg (creato dal database seo) in un nuovo database seo2. Se il tuo file di backup è solo un file .sql, puoi ritagliarlo manualmente a mano libera.
araqnid,

61
Non puoi avere -de -fallo stesso tempo. pg_restore: options -d/--dbname and -f/--file cannot be used together
CppLearner,

8
Nella versione 9.2 l'opzione "-f" specifica un file di output, non il file di dump (e probabilmente significa lo stesso nelle versioni precedenti).
David Resnick,

4
Per quanto riguarda cannot be used together, vedere qui: stackoverflow.com/questions/27882070/...
Abdull

3
@ Alex78191 significa che viene eseguita come una singola transazione, che potrebbe completamente fallire e rollback o passare attraverso. Bloccherà anche un po 'di accesso al database.
ATN,

216

creare il backup

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 è un formato personalizzato (compresso e in grado di eseguire in parallelo con -j N) -b include BLOB, -v è dettagliato, -f è il nome del file di backup

ripristinare dal backup

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

importante impostare -h localhost - opzione


2
Vorrei menzionare che prima di eseguire questi comandi dovresti trovarti nella cartella bin di Posgresql . Ad esempio in Windows (se lo hai installato nella cartella predefinita) sarebbe C: \ Programmi \ PostgreSQL \ 9.6 \ bin
juan_carlos_yl

90

Potrebbe essere necessario accedere come postgresper avere i privilegi completi sui database.

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 

switch -Fspecifica il formato del file di backup:

  • c utilizzerà il formato PostgreSQL personalizzato che è compresso e si traduce in dimensioni di file di backup minime
  • d per directory in cui ogni file è una tabella
  • t per archivio TAR (più grande del formato personalizzato)
  • -h/ --hostSpecifica il nome host della macchina su cui è in esecuzione il server
  • -W/ --passwordForza la pg_dumprichiesta di una password prima di connettersi a un database

ripristinare il backup:

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

Il parametro -Cdeve creare il database prima di importare i dati. Se non funziona, puoi sempre creare un database, ad es. con comando (come utente postgreso altro account che dispone dei diritti per creare database)createdb db_name -O owner

pg_dump / psql

Nel caso in cui non sia stato specificato l'argomento -F, è stato utilizzato (o con-F p ) il . Quindi non puoi usare pg_restore. È possibile importare dati con psql.

backup:

pg_dump -U username -f backup.sql database_name

ristabilire:

psql -d database_name -f backup.sql

Ho usato il comando "psql -d database_name -f backup.sql" per ripristinare un database scaricato da dokku su DigitalOcean. Ha funzionato alla grande.
NineBlindEyes

1
mentre usi psql se il tuo utente (per es. postgres) ha una password impostata allora l' -Wopzione dovrebbe essere usata. Ad esempio su Ubuntu senza fare su postgresnulla da terminale $ psql -h localhost -U postgres -W -d DB_NAME < DB_BACKUP.sqlè il comando che ha funzionato per me per ripristinare il mio backup sul mio localhost. Si noti che -hè necessaria l'opzione.
Jignesh Gohel,

@JiggneshhGohel Come dice il manuale: l' -Wopzione non è mai essenziale. pg_dumpchiederà automaticamente una password se il server richiede l'autenticazione con password. Inoltre puoi usare la PGPASSWORDvariabile env, se stai usando password in testo semplice. -hè necessario se il valore predefinito PGHOSTnon è applicabile. Queste opzioni sono comuni a molti programmi di utilità PostgreSQL, quindi non sono indispensabili per rispondere a questa domanda (dipende fortemente dalla configurazione).
Tombart,

@Tombart la tua seconda pg_dump/psqlparte opzionale è lavoro per me. ma la prima parte pg_dump/pg_restorenon funziona per me per il ripristino. Grazie.
Anjan Biswas il

@AnjanBiswas La prima opzione utilizza l'archivio compresso, che richiederà più CPU ma il file di backup occuperà meno spazio sul disco. Devi solo scegliere una compressione appropriata, ad es.-Fc
Tombart,

60

POSTGRESQL 9.1.12

DUMP:

pg_dump -U user db_name > archive_name.sql

inserisci la password utente e premi invio.

RISTABILIRE:

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

inserisci la password utente e premi invio.


31

Di seguito è la mia versione di pg_dumpcui utilizzo per ripristinare il database:

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

o usa psql:

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

dove -hhost, -pporta, -unome utente di accesso, -dnome del database


2
Govind Singh, perché hai modificato la mia risposta? le tue modifiche non portano nulla di nuovo ..
Yahor M

1
my_new_databasedovrebbe già esistere quando si utilizza psql, no?
Elmex80s

22

Backup e ripristino con GZIP

Per database di dimensioni maggiori, questo è molto buono

di riserva

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

ristabilire

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

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


1
Per Ubuntu potresti usare: gunzip -c mydb.pgsql.gz | sudo -u postgres psqlPer ottenere i permessi per operare sul database. Considera anche la --cleanbandiera durante il dumping, che cancellerà tutti i dati esistenti, potrebbe tornare utile.
Sebastian,

Funziona alla grande e pulita soluzione per me. Grazie!
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}

8

Questo ha funzionato per me:

pg_restore --verbose --clean --no-acl --no-owner --host=localhost --dbname=db_name --username=username latest.dump

Grazie, --no-ownermi ha davvero aiutato.
bonafernando il

7

1.Aprire il terminale.

2. eseguire il backup del database con il seguente comando

il tuo cestino postgres - /opt/PostgreSQL/9.1/bin/

il server del database di origine - 192.168.1.111

posizione e nome del file di backup - /home/dinesh/db/mydb.backup

il tuo nome db di origine - 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. ripristina il file mydb.backup nella destinazione.

il tuo server di destinazione - localhost

il nome del database di destinazione - mydatabase

creare un database per ripristinare il backup.

/opt/PostgreSQL/9.1/bin/psql -h 'localhost' -p 5432 -U postgres -c "CREATE DATABASE mydatabase"

ripristinare il backup.

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


4

Se si crea un backup utilizzando pg_dump, è possibile ripristinarlo facilmente nel modo seguente:

  1. Apri la finestra della riga di comando
  2. Vai alla cartella bin di Postgres. Per esempio: cd "C:\ProgramFiles\PostgreSQL\9.5\bin"
  3. Immettere il comando per ripristinare il database. For example: psql.exe -U postgres -d YourDatabase -f D:\Backup\.sql
  4. Digita la password per l'utente postgres
  5. Controlla il processo di ripristino

4

1) Aprire il terminale psql.

2) Decomprimere / decomprimere il file di dump.

3) Creare un database vuoto.

4) utilizzare il comando seguente per ripristinare il file .dump

<database_name>-# \i <path_to_.dump_file>

4

prova questo:

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

Ripristina DB psql dal file .sql


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



2

Il ripristino di un file di backup postgres dipende innanzitutto da come è stato eseguito il backup.

Se hai usato pg_dump con -F c o -F d devi usare pg_restore altrimenti puoi semplicemente usare

psql -h localhost -p 5432 -U postgres <file di backup

9 modi per eseguire il backup e il ripristino dei database postgres


Ti rendi conto di aver perso la parte del nome del database e si lamenterà che il database di destinazione non esiste?
Pere,

2

Prova a vedere se i seguenti comandi possono aiutarti:

sudo su - yourdbuser
psql
\i yourbackupfile

2

Ci scusiamo per il necropost, ma queste soluzioni non hanno funzionato per me. Sono su Postgres 10. Su Linux:

  1. Ho dovuto cambiare directory nel mio pg_hba.conf.
  2. Ho dovuto modificare il file per cambiare metodo da peer a md5 come indicato qui
  3. Riavvia il servizio: service postgresql-10 restart
  4. Passa alla directory in cui si trovava il mio backup.sql ed esegui:
    psql postgres -d database_name -1 -f backup.sql

    -database_name è il nome del mio database

    -backup.sql è il nome del mio file di backup .sql.


1

Ho riscontrato problemi di autenticazione con pg_dump, quindi ho spostato il mio file di dump

mv database_dump /tmp

nella directory temporanea e quindi eseguito

su -u postgres
cd /tmp
pg_restore database_dump

Se si dispone di un dump di database di grandi dimensioni, è possibile che si desideri creare un'altra directory in cui l'utente corrente e l'utente di postgres possono accedere e inserirvi il file di dump del database.


1

Se si dispone di un file SQL di backup, è possibile ripristinarlo facilmente. Segui le istruzioni, riportate di seguito

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 

Digita la password per l'utente di Postgres, se necessario, e lascia che Postgres faccia il suo lavoro. Quindi è possibile verificare il processo di ripristino.


0

Se si desidera eseguire il backup dei dati o ripristinare i dati da un backup, è possibile eseguire i comandi seguenti:

  1. Per creare il backup dei tuoi dati, vai alla directory postgres \ bin \ come C:\programfiles\postgres\10\bin\e quindi digita il seguente comando:

    pg_dump -FC -U ngb -d ngb -p 5432 >C:\BACK_UP\ngb.090718_after_readUpload.backup
  2. Per ripristinare i dati da un backup, vai alla directory postgres \ bin \ come C:\programfiles\postgres\10\bin\e quindi digita il comando seguente:

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

    Assicurati che il file di backup esista.


-3

Vedi sotto esempio il suo funzionamento

C: / Programmi / PostgreSQL / 9.4 / bin \ pg_restore.exe --host localhost --port 5432 - nome utente "postgres" - nome dominio "newDatabase" --no-password --verbose

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.