Restaurer un fichier de sauvegarde postgres en utilisant la ligne de commande?

294

Je suis nouveau sur postgresql, et localement, j'utilise pgadmin3. Sur le serveur distant, cependant, je n'ai pas un tel luxe.

J'ai déjà créé la sauvegarde de la base de données et je l'ai copiée, mais existe-t-il un moyen de restaurer une sauvegarde à partir de la ligne de commande? Je ne vois que des choses liées à l'interface graphique ou à pg_dumps, donc, si quelqu'un peut me dire comment procéder, ce serait formidable!

TwixxyKit
la source

Réponses:

365

Il existe deux outils à examiner, selon la façon dont vous avez créé le fichier de vidage.

Votre première source de référence devrait être la page pg_dump(1)de manuel car c'est ce qui crée le vidage lui-même. Ça dit:

Les vidages peuvent être générés au format de fichier script ou archive. Les vidages de script sont des fichiers en texte brut contenant les commandes SQL requises pour reconstruire la base de données dans son état au moment de son enregistrement. Pour restaurer à partir d'un tel script, alimentez-le dans psql (1). Les fichiers de script peuvent être utilisés pour reconstruire la base de données même sur d'autres machines et d'autres architectures; avec quelques modifications même sur d'autres produits de base de données SQL.

Les autres formats de fichier d'archive doivent être utilisés avec pg_restore (1) pour reconstruire la base de données. Ils permettent à pg_restore d'être sélectif sur ce qui est restauré, ou même de réorganiser les éléments avant de les restaurer. Les formats de fichiers d'archive sont conçus pour être portables entre les architectures.

Cela dépend donc de la façon dont il a été vidé. Vous pouvez probablement le comprendre à l'aide de l'excellente file(1)commande - s'il mentionne du texte ASCII et / ou SQL, il devrait être restauré avec psqlsinon vous devriez probablement utiliserpg_restore

La restauration est assez simple:

psql -U username -d dbname < filename.sql

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

ou

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

Consultez leurs pages de manuel respectives - il existe de nombreuses options qui affectent le fonctionnement de la restauration. Vous devrez peut-être nettoyer vos bases de données "en direct" ou les recréer à partir de template0 (comme indiqué dans un commentaire) avant la restauration, selon la façon dont les vidages ont été générés.

Steven Schlansker
la source
3
IME que vous souhaitez pratiquement toujours restaurer dans une base de données nouvellement créée à partir de template0. Sinon, si vous avez fait quelque chose comme activer plpgsql dans template1, le processus de restauration essaiera de le faire à nouveau, et le commutateur -1 que vous proposez signifie que la transaction entière échouera. Donc quelque chose comme "createdb -T template0 seo2" suivi de "pg_restore -v -d seo2 seo.pg" pour restaurer seo.pg (fabriqué à partir de la base de données seo) dans une nouvelle base de données seo2. Si votre fichier de sauvegarde n'est qu'un fichier .sql, vous pouvez en supprimer manuellement les parties conflictuelles.
araqnid
61
Vous ne pouvez pas avoir -det -fen même temps. pg_restore: options -d/--dbname and -f/--file cannot be used together
CppLearner
8
Dans la version 9.2, l'option "-f" spécifie un fichier de sortie, pas le fichier de vidage (et cela signifie probablement la même chose dans les versions antérieures).
David Resnick
4
Concernant cannot be used together, voir ici: stackoverflow.com/questions/27882070/…
Abdull
3
@ Alex78191, cela signifie qu'il s'exécute en tant que transaction unique, qui pourrait complètement échouer et annuler, ou passer. Cela bloquera également l'accès à la base de données.
ATN
216

créer une sauvegarde

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 est un format personnalisé (compressé et capable de le faire en parallèle avec -j N) -b inclut des blobs, -v est verbeux, -f est le nom du fichier de sauvegarde

Restore depuis une sauvergarde

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

important de définir -h localhost - option

pilote
la source
2
Je voudrais mentionner qu'avant d'exécuter ces commandes, vous devriez vous trouver dans le dossier bin Posgresql . Par exemple sous Windows (si vous l'avez installé dans le dossier par défaut) ce serait C: \ Program Files \ PostgreSQL \ 9.6 \ bin
juan_carlos_yl
90

Vous devrez peut-être être connecté en tant que postgresafin d'avoir tous les privilèges sur les bases de données.

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 

commutateur -Fspécifiez le format du fichier de sauvegarde:

  • c utilisera le format PostgreSQL personnalisé qui est compressé et entraîne la plus petite taille de fichier de sauvegarde
  • d pour le répertoire où chaque fichier est une table
  • t pour l'archive TAR (plus grand que le format personnalisé)
  • -h/ --hostSpécifie le nom d'hôte de la machine sur laquelle le serveur s'exécute
  • -W/ --passwordForcer pg_dumpà demander un mot de passe avant de se connecter à une base de données

restaurer la sauvegarde:

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

Le paramètre -Cdoit créer une base de données avant d'importer des données. Si cela ne fonctionne pas, vous pouvez toujours créer une base de données, par exemple. avec commande (en tant qu'utilisateur postgresou autre compte autorisé à créer des bases de données)createdb db_name -O owner

pg_dump / psql

Si vous n'avez pas spécifié l'argument, -Fle format SQL en texte brut par défaut a été utilisé (ou avec -F p). Ensuite, vous ne pouvez pas utiliser pg_restore. Vous pouvez importer des données avec psql.

sauvegarde:

pg_dump -U username -f backup.sql database_name

restaurer:

psql -d database_name -f backup.sql
Tombart
la source
J'ai utilisé la commande "psql -d nom_base de données -f backup.sql" pour restaurer une base de données que j'ai transférée de dokku sur DigitalOcean. Fonctionne très bien.
NineBlindEyes
1
lorsque vous utilisez psql si votre utilisateur (par exemple postgres) a un mot de passe défini, l' -Woption doit être utilisée. Par exemple, sur Ubuntu sans rien faire su postgresdepuis le terminal, $ psql -h localhost -U postgres -W -d DB_NAME < DB_BACKUP.sqlc'est la commande qui a fonctionné pour moi pour restaurer ma sauvegarde sur mon hôte local. Notez que cette -hoption est nécessaire.
Jignesh Gohel
@JiggneshhGohel Comme le dit le manuel: l' -Woption n'est jamais indispensable. pg_dumpdemandera automatiquement un mot de passe si le serveur demande une authentification par mot de passe. Vous pouvez également utiliser la PGPASSWORDvariable env, si vous utilisez des mots de passe en texte brut. -hest nécessaire si la valeur par défaut PGHOSTn'est pas applicable. Ces options sont communes à de nombreux utilitaires PostgreSQL, donc pas essentielles pour répondre à cette question (cela dépend fortement de votre configuration).
Tombart
@Tombart votre 2ème pg_dump/psqlpartie d' option me convient. mais la 1ère partie pg_dump/pg_restorene me convient pas pour la restauration. Je vous remercie.
Anjan Bis était le
@AnjanBiswas La première option utilise une archive compressée, qui aura besoin de plus de CPU mais le fichier de sauvegarde occupera moins d'espace sur le disque. Il vous suffit de choisir la compression appropriée, par exemple-Fc
Tombart
60

POSTGRESQL 9.1.12

DÉVERSER:

pg_dump -U user db_name > archive_name.sql

entrez le mot de passe utilisateur et appuyez sur Entrée.

RESTAURER:

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

entrez le mot de passe utilisateur et appuyez sur Entrée.

Natan Medeiros
la source
31

Voici ma version pg_dumpdont j'utilise pour restaurer la base de données:

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

ou utilisez psql:

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

-hhôte, -pport, -unom d'utilisateur de connexion, -dnom de la base de données

Yahor M
la source
2
Govind Singh, pourquoi avez-vous modifié ma réponse? vos changements n'apportent rien de nouveau ..
Yahor M
1
my_new_databasedevrait déjà exister lors de l'utilisation psql, non?
Elmex80s
22

Sauvegarde et restauration avec GZIP

Pour une base de données de plus grande taille, c'est très bon

sauvegarde

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

restaurer

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

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

Sarath Ak
la source
1
Pour ubuntu, vous pouvez utiliser: gunzip -c mydb.pgsql.gz | sudo -u postgres psql Pour obtenir les autorisations d'opérer sur la base de données. Pensez également au --cleandrapeau lorsque le dumping, qui effacera toutes les données existantes, pourrait être utile.
Sebastian
Travailler une solution géniale et soignée pour moi. Je vous remercie!
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
la source
8

Cela a fonctionné pour moi:

pg_restore --verbose --clean --no-acl --no-owner --host=localhost --dbname=db_name --username=username latest.dump
Franz
la source
Merci, --no-ownerça m'a vraiment aidé.
bonafernando
7

1. ouvrez le terminal.

2. sauvegarder votre base de données avec la commande suivante

votre bac postgres - /opt/PostgreSQL/9.1/bin/

votre serveur de base de données source - 192.168.1.111

l'emplacement et le nom de votre fichier de sauvegarde - /home/dinesh/db/mydb.backup

votre nom de base de données source - 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 "" ma base de données "

3. restaurez le fichier mydb.backup dans la destination.

votre serveur de destination - localhost

le nom de votre base de données de destination - mydatabase

créer une base de données pour restaurer la sauvegarde.

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

restaurer la sauvegarde.

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

Dinesh-SriLanka
la source
4

Si vous créez une sauvegarde à l'aide de pg_dump, vous pouvez facilement la restaurer de la manière suivante:

  1. Ouvrir la fenêtre de ligne de commande
  2. Accédez au dossier bin Postgres. Par exemple: cd "C:\ProgramFiles\PostgreSQL\9.5\bin"
  3. Entrez la commande pour restaurer votre base de données. For example: psql.exe -U postgres -d YourDatabase -f D:\Backup\.sql
  4. Saisissez le mot de passe de votre utilisateur postgres
  5. Vérifiez le processus de restauration

la source
4

1) Ouvrez le terminal psql.

2) Décompressez / décompressez le fichier de vidage.

3) Créez une base de données vide.

4) utilisez la commande suivante pour restaurer le fichier .dump

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

essaye ça:

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

Restaurer la base de données psql à partir du fichier .sql

Faysal Maqsood
la source
psql -U <nom d'utilisateur> -d <nom de base de données> -f <nom de fichier> .sql
Faysal Maqsood
3

essayer:

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

La restauration d'un fichier de sauvegarde postgres dépend de la façon dont vous avez effectué la sauvegarde en premier lieu.

Si vous avez utilisé pg_dump avec -F c ou -F d, vous devez utiliser pg_restore sinon vous pouvez simplement utiliser

psql -h localhost -p 5432 -U postgres <fichier de sauvegarde

9 façons de sauvegarder et de restaurer des bases de données PostgreSQL

Prashant Kumar
la source
Vous rendez-vous compte que vous avez manqué la partie du nom de la base de données et qu'elle se plaindra de la base de données de destination n'existe pas?
Pere
2

Essayez de voir si les commandes suivantes peuvent vous aider:

sudo su - yourdbuser
psql
\i yourbackupfile
Mehmet Ali
la source
2

Désolé pour le nécropost, mais ces solutions n'ont pas fonctionné pour moi. Je suis en postgres 10. Sous Linux:

  1. J'ai dû changer de répertoire pour mon pg_hba.conf.
  2. J'ai dû modifier le fichier pour changer la méthode de pair à md5 comme indiqué ici
  3. Redémarrez le service: service postgresql-10 restart
  4. Remplacez le répertoire par l'emplacement de mon fichier backup.sql et exécutez:
    psql postgres -d database_name -1 -f backup.sql

    -database_name est le nom de ma base de données

    -backup.sql est le nom de mon fichier de sauvegarde .sql.

Tim
la source
1

J'avais des problèmes d'authentification lors de l'exécution de pg_dump, j'ai donc déplacé mon fichier de vidage

mv database_dump /tmp

dans le répertoire temporaire, puis a couru

su -u postgres
cd /tmp
pg_restore database_dump

Si vous avez un grand vidage de base de données, vous souhaiterez peut-être simplement créer un autre répertoire où votre utilisateur actuel et l'utilisateur postgres peuvent accéder et y placer le fichier de vidage de base de données.

user1876508
la source
1

Si vous avez un fichier SQL de sauvegarde, vous pouvez facilement le restaurer. Suivez simplement les instructions données ci-dessous

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 

Tapez le mot de passe de votre utilisateur postgres si nécessaire et laissez Postgres faire son travail. Ensuite, vous pouvez vérifier le processus de restauration.

Omar
la source
0

Si vous souhaitez sauvegarder vos données ou restaurer des données à partir d'une sauvegarde, vous pouvez exécuter les commandes suivantes:

  1. Pour créer une sauvegarde de vos données, accédez à votre répertoire postgres \ bin \ comme C:\programfiles\postgres\10\bin\et tapez la commande suivante:

    pg_dump -FC -U ngb -d ngb -p 5432 >C:\BACK_UP\ngb.090718_after_readUpload.backup
  2. Pour restaurer les données à partir d'une sauvegarde, accédez à votre répertoire postgres \ bin \ comme C:\programfiles\postgres\10\bin\et tapez la commande ci-dessous:

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

    Veuillez vous assurer que le fichier de sauvegarde existe.

Girjesh Kumar Suryawanshi
la source
-3

Voir ci-dessous l'exemple de son fonctionnement

C: / Program Files / 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 "

user3881346
la source