Le fichier d'entrée semble être un vidage au format texte. Veuillez utiliser psql

90

Je prends une sauvegarde en utilisant

pg_dump db_production > postgres_db.dump

puis je le copie sur localhost en utilisant scp.

Maintenant, lorsque j'importe sur ma base de données locale, cela donne une erreur

pg_restore: [archiver] input file appears to be a text format dump. Please use psql.

en utilisant la ligne de virgule

pg_restore -d db_development postgres_db.dump
Haseeb Ahmad
la source

Réponses:

133

De la pg_dumpdocumentation:

Exemples

Pour vider une base de données appelée mydb dans un fichier de script SQL :

$ pg_dump mydb > db.sql

Pour recharger un tel script dans une base de données (nouvellement créée) nommée newdb :

$ psql -d newdb -f db.sql

Pour vider une base de données dans un fichier d'archive au format personnalisé:

$ pg_dump -Fc mydb > db.dump

Pour vider une base de données dans une archive au format répertoire:

$ pg_dump -Fd mydb -f dumpdir

Pour recharger un fichier archive dans une base de données (fraîchement créée) nommée newdb:

$ pg_restore -d newdb db.dump

De la pg_restoredocumentation:

Exemples

Supposons que nous ayons vidé une base de données appelée mydb dans un fichier de vidage au format personnalisé:

$ pg_dump -Fc mydb > db.dump

Pour supprimer la base de données et la recréer à partir du vidage:

$ dropdb mydb
$ pg_restore -C -d postgres db.dump
Зелёный
la source
2
quand je fais pg_restore, j'obtiens pg_restore: le fichier d'entrée [archiveur] semble être un vidage de format texte. Veuillez utiliser psql.
Haseeb Ahmad
Lequel j'utilise pour restaurer la base de données?
Haseeb Ahmad
66
cela ne répond pas à la question
dopatraman
1
pour un moyen de restaurer à partir d'un fichier texte checkout serverfault.com/questions/260607/…
chrs
5
IMO, ce post a un peu trop de détails qui obscurcit la réponse. Ce que l'auteur n'a pas fait remarquer, c'est que la documentation pg_dump pour le paramètre '-F' ne dit pas que le format par défaut ('p' / 'plain') convient à pg_restore. pg_restore nécessite que pg_dump soit utilisé avec les formats «c», «d» ou «t».
Matt
59

La réponse ci-dessus n'a pas fonctionné pour moi, cela a fonctionné:

psql db_development < postgres_db.dump

Uziel Valdez
la source
Court et doux. A travaillé pour moi aussi.
Élève du
11

Pour moi, lorsque j'essaie de restaurer à partir de l'hôte distant que j'ai utilisé

psql -U username -p 5432 -h 10.10.10.1 -d database < db.dump

a bien fonctionné. Et si ce n'est pas à distance, la commande suivante a fonctionné.

psql -d database < db.dump
Tserenjamts
la source
7

Pour créer une sauvegarde en utilisant pg_dumpqui est compatible avec, pg_restorevous devez utiliser le --format=custom/ -Fclors de la création de votre vidage.

À partir de la documentation:

Sortez une archive au format personnalisé qui peut être entrée dans pg_restore.

Ainsi, votre pg_dumpcommande pourrait ressembler à:

pg_dump --file /tmp/db.dump --format=custom --host localhost --dbname my-source-database --username my-username --password

Et votre pg_restorecommande:

pg_restore --verbose --clean --no-acl --no-owner --host localhost --dbname my-destination-database /tmp/db.dump
Tim Fletcher
la source
6

Pour moi, ça marche comme celui-ci. C: \ Program Files \ PostgreSQL \ 12 \ bin> psql -U postgres -p 5432 -d dummy -f C: \ Users \ Downloads \ d2cm_test.sql

RAJNISH YADAV
la source
2
Réponse simple et utile!
Rax Weber
1
Merci @RAJNISH YADAV.
Amit le
0

si vous utilisez pg_dump avec -Fp pour sauvegarder au format texte brut, utilisez la commande suivante:

cat db.txt | psql dbname

pour copier toutes les données dans votre base de données avec le nom dbname

M2E67
la source
0

Si vous disposez d'un vidage de base de données complet:

PGPASSWORD="your_pass" psql -h "your_host" -U "your_user" -d "your_database" -f backup.sql

Si vous avez des schémas conservés séparément, cela ne fonctionnera pas. Ensuite, vous devrez désactiver les déclencheurs pour l'insertion de données, comme pg_restore --disable-triggers. Vous pouvez ensuite utiliser ceci:

cat database_data_only.gzip | gunzip | PGPASSWORD="your_pass" psql -h "your_host" -U root "your_database" -c 'SET session_replication_role = replica;' -f /dev/stdin

Sur une note secondaire, c'est un inconvénient très malheureux de postgres, je pense. La méthode par défaut de création d'un vidage dans pg_dumpest incompatible avec pg_restore. Avec quelques clés supplémentaires, cependant, c'est le cas. WTF?

VasiliNovikov
la source