Importer le vidage SQL dans la base de données PostgreSQL

451

Nous changeons d'hôtes et l'ancien a fourni un vidage SQL de la base de données PostgreSQL de notre site.

Maintenant, j'essaie de configurer cela sur un serveur WAMP local pour tester cela.

Le seul problème est que je ne sais pas comment importer cette base de données dans PostgreSQL 9 que j'ai installé.

J'ai essayé pgAdmin III mais je n'arrive pas à trouver une fonction «importation». J'ai donc juste ouvert l'éditeur SQL et collé le contenu du vidage là-bas et l'ai exécuté, il crée les tables mais il me donne toujours des erreurs quand il essaie d'y mettre les données.

ERROR:  syntax error at or near "t"
LINE 474: t 2011-05-24 16:45:01.768633 2011-05-24 16:45:01.768633 view...

The lines:
COPY tb_abilities (active, creation, modtime, id, lang, title, description) FROM stdin;
t   2011-05-24 16:45:01.768633  2011-05-24 16:45:01.768633  view    nl ...  

J'ai également essayé de le faire avec l'invite de commande, mais je ne trouve pas la commande dont j'ai besoin.

Si je fais

psql mydatabase < C:/database/db-backup.sql;

Je reçois l'erreur

ERROR:  syntax error at or near "psql"
LINE 1: psql mydatabase < C:/database/db-backu...
        ^

Quelle est la meilleure façon d'importer la base de données?

éblouir
la source
J'ai eu une erreur semblable à votre premier: ERROR: syntax error at or near "t". Il s'est avéré que je n'avais importé qu'un schéma partiel et qu'une CREATE TABLEinstruction antérieure au script avait donc échoué. Parcourez la sortie complète de l'importation pour la trouver.
owensmartin

Réponses:

732
psql databasename < data_base_dump

C'est la commande que vous recherchez.

Attention: databasenamedoit être créé avant l'importation. Jetez un œil au chapitre 23 de la documentation et de la sauvegarde de PostgreSQL Docs .

Jacob
la source
1
J'ai essayé cette psql mydatabase <C: \ database \ db-backup.sql mais j'obtiens l'erreur Invalid command \ database. J'ai aussi essayé avec "" autour.
dazz
23
@Dazz Vous devez exécuter cette commande à partir de votre invite de commande (Démarrer -> Exécuter -> cmd), et non à partir de l'invite postgres.
Jacob
2
si je l'exécute à partir de cmd, j'obtiens 'L'opérateur' <'est réservé pour une utilisation future.'
dazz
3
@Dazz: Vous pouvez aussi utiliser -fswitch (ou --file)
Grzegorz Szpetkowski
47
psql --username = postgres databasename <data_base_dump.sql
Maxence
356

Voici la commande que vous recherchez.

psql -h hostname -d databasename -U username -f file.sql
Gabriel Ramirez
la source
29
Bon, mais mieux ajoutez également le paramètre "-L logfile.log" pour enregistrer la sortie dans le fichier.
zerologiko
2
obtenir ceci "L'entrée est un vidage au format personnalisé PostgreSQL. Utilisez le client de ligne de commande pg_restore pour restaurer ce vidage dans une base de données."
Wajdan Ali
3
Vous pouvez également:pg_restore -h hostname -d dbname -U username filename.sql
Fábio Araújo
114

Je crois que vous voulez exécuter en psql:

\i C:/database/db-backup.sql
Arran Ubels
la source
J'ai dû utiliser cela car l'eshell d'Emacs ne prend pas en charge la redirection d'entrée. Merci.
douma
3
Assurez-vous de passer d'abord à la base de données avec \ c <database_name>
hkong
53

Cela a fonctionné pour moi:

sudo -u postgres psql db_name < 'file_path'
ivanacorovic
la source
49

Je ne sais pas si cela fonctionne pour la situation de l'OP, mais j'ai trouvé que l'exécution de la commande suivante dans la console interactive était la solution la plus flexible pour moi:

\i 'path/to/file.sql'

Assurez-vous simplement que vous êtes déjà connecté à la bonne base de données. Cette commande exécute toutes les commandes SQL du fichier spécifié.

rockusbacchus
la source
1
Cette solution a fonctionné pour moi tandis que la solution la plus votée a généré l'erreur "stdin n'est pas un tty".
김민준
Exactement ce que je cherchais - un moyen d'exécuter le script depuis l'intérieur de la psqlligne de commande. Merci!
vatsug
Je voulais juste vous remercier pour celui-ci. Doit être inclus dans la bonne réponse.
PKHunter
c'est correct, n'utilisez pas de barres obliques inverses dans le chemin d'accès dans Windows!
Erdinc Ay
aussi pour Windows, vous avez besoin de barres obliques doubles
CMAS
44

Fonctionne assez bien, en ligne de commande, tous les arguments sont requis, -W est pour le mot de passe

psql -h localhost -U user -W -d database_name -f path/to/file.sql
Feuda
la source
22

Juste pour le fun, si votre vidage est compressé, vous pouvez faire quelque chose comme

gunzip -c filename.gz | psql dbname

Comme Jacob l'a mentionné, les documents PostgreSQL décrivent tout cela assez bien.

alan
la source
7

J'utilise:

cat /home/path/to/dump/file | psql -h localhost -U <user_name> -d <db_name>

J'espère que cela aidera quelqu'un.

Vajira Lasantha
la source
4

Vous pouvez le faire dans pgadmin3. Supprimez le ou les schémas contenus dans votre vidage. Cliquez ensuite avec le bouton droit sur la base de données et choisissez Restaurer. Ensuite, vous pouvez rechercher le fichier de vidage.

Vanessa MacDougal
la source
2
Mais le bouton «restaurer» ne peut pas être cliqué même après avoir sélectionné le fichier .sql. Ce logiciel semble vouloir un autre type de fichier - un au format * .backup. Cliquer sur 'aide' sur cette boîte d'importation fait référence à pg_restore - "... un utilitaire pour restaurer une base de données PostgreSQL à partir d'une archive créée par pg_dump dans l'un des formats non texte brut." Le fichier sql auquel l'OP fait référence est un format de texte brut.
JosephK
4

J'ai remarqué que de nombreux exemples sont trop compliqués pour localhost où il n'y a que des utilisateurs postgres sans mot de passe dans de nombreux cas:

psql -d db_name -f dump.sql
Kiryl Plyashkevich
la source
4

assurez-vous que la base de données que vous souhaitez importer est créée, vous pouvez alors importer le vidage avec

sudo -u postgres -i psql testdatabase < db-structure.sql

Si vous souhaitez remplacer toute la base de données, supprimez d'abord la base de données

# be sure you drop the right database !!!
#sudo -u postgres -i psql -c "drop database testdatabase;"

puis le recréer avec

sudo -u postgres -i psql -c "create database testdatabase;"
rubo77
la source
2

J'ai essayé de nombreuses solutions différentes pour restaurer ma sauvegarde postgres. J'ai rencontré des problèmes d'autorisation refusée sur MacOS, aucune solution ne semblait fonctionner.

Voici comment je l'ai fait fonctionner:

Postgres est livré avec Pgadmin4. Si vous utilisez macOS, vous pouvez appuyer sur CMD+ SPACEet taper pgadmin4pour l'exécuter. Cela ouvrira un onglet de navigateur en chrome.

Si vous rencontrez des erreurs pour faire fonctionner pgadmin4, essayez killall pgAdmin4dans votre terminal, puis réessayez.


Étapes pour obtenir la sauvegarde / restauration de pgadmin4 +

1. Créez la sauvegarde

Pour ce faire, cliquez avec le bouton droit sur la base de données -> "sauvegarde"

entrez la description de l'image ici

2. Donnez un nom au fichier.

Comme test12345. Cliquez sur sauvegarde. Cela crée un vidage de fichier binaire, ce n'est pas dans un .sqlformat

entrez la description de l'image ici

3. Voir où il a été téléchargé

Il devrait y avoir une fenêtre contextuelle en bas à droite de votre écran. Cliquez sur la page "plus de détails" pour voir où votre sauvegarde a été téléchargée

entrez la description de l'image ici

4. Trouvez l'emplacement du fichier téléchargé

Dans ce cas, c'est /users/vincenttang

entrez la description de l'image ici

5. Restaurez la sauvegarde à partir de pgadmin

En supposant que vous ayez effectué les étapes 1 à 4 correctement, vous aurez un fichier binaire de restauration. Il peut arriver que votre collègue veuille utiliser votre fichier de restauration sur sa machine locale. Demandez à cette personne d'aller sur pgadmin et de restaurer

Pour ce faire, cliquez avec le bouton droit sur la base de données -> "restaurer"

entrez la description de l'image ici

6. Sélectionnez le localisateur de fichiers

Assurez-vous de sélectionner l'emplacement du fichier manuellement, NE PAS faire glisser et déposer un fichier sur les champs de l'uploader dans pgadmin. Parce que vous rencontrerez des autorisations d'erreur. À la place, recherchez le fichier que vous venez de créer:

entrez la description de l'image ici

7. Trouver ledit fichier

Vous devrez peut-être modifier le filtre en bas à droite sur "Tous les fichiers". Recherchez le fichier par la suite, à partir de l'étape 4. Appuyez maintenant sur le bouton "Sélectionner" en bas à droite pour confirmer

entrez la description de l'image ici

8. Restaurer ledit fichier

Vous verrez à nouveau cette page, avec l'emplacement du fichier sélectionné. Allez-y et restaurez-le

entrez la description de l'image ici

9. Succès

Si tout va bien, le coin inférieur droit devrait afficher un indicateur indiquant une restauration réussie. Vous pouvez naviguer vers vos tables pour voir si les données ont été restaurées propery sur chaque table.

10. En cas d'échec:

Si l'étape 9 échoue, essayez de supprimer votre ancien schéma public sur votre base de données. Allez dans "Outil de requête"

entrez la description de l'image ici

Exécutez ce bloc de code:

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

entrez la description de l'image ici

Maintenant, essayez à nouveau les étapes 5 à 9, cela devrait fonctionner

Sommaire

C'est ainsi que j'ai dû sauvegarder / restaurer ma sauvegarde sur Postgres, lorsque j'ai eu des problèmes d'autorisation d'erreur et que je ne pouvais pas me connecter en tant que superutilisateur. Ou définissez les informations d'identification pour la lecture / écriture à l'aide chmoddes dossiers. Ce flux de travail fonctionne pour un vidage de fichier binaire par défaut "Personnalisé" de pgadmin. Je suppose que .sqlc'est la même chose, mais je n'ai pas encore testé

Vincent Tang
la source