Comment restaurer le fichier dump PostgreSQL dans les bases de données Postgres?

j'ai un fichier de vidage avec un .SQL extension (en fait c'est un fichier SQL en texte clair). Je veux le restaurer dans mes bases de données. Je suis à l'aide de pgAdmin III, et quand j'utilise son "assistant de restauration" il ne met pas en surbrillance le bouton "Restaurer". Au lieu de cela il attend un .backup extension de fichier.

j'ai essayé d'utiliser shell pour restaurer le dump, mais ça n'a pas marché.

je suis un débutant à ce. Si quelqu'un pouvait m'aider je serais obliger.

Modifier

j'ai utilisé la commande suivante au volet Shell SQL de PostGres alors que j'étais assis au newTestDB.

newTestDB-# i E:db-rbl-restore-20120511_Dump-20120514.sql

il a quand même donné la même erreur ("Permission refusée").

Après l'élévation des autorisations juste me montre les tables par défaut de PostgreSQL:

      List of tablespaces
Name       |  Owner   | Location
-----------+----------+----------
pg_default | postgres |
pg_global  | postgres |

(2 rows)

Je ne sais pas quoi faire pour importer/restaurer une base de données à partir d'un fichier SQL.

39
demandé sur Daniel Vérité 2012-05-26 00:39:02

7 réponses

vous n'avez pas mentionné comment votre sauvegarde a été faite, donc la réponse générique est:Généralement psql outil.

selon ce que pg_dump a été chargé de dumper, le fichier SQL peut avoir différents ensembles de commandes SQL. Par exemple, si vous demandez le pg_dump pour faire un dump d'une base de données à l'aide de --clean et --schema-only, vous ne pouvez pas vous attendre à pouvoir restaurer la base de données à partir de ce dump car il n'y aura pas de commandes SQL pour copier (ou Insérer si --inserts est utilisé ) données réelles dans les tableaux. Un dump comme celui-ci ne contiendra que des commandes SQL DDL, et sera capable de recréer le schéma mais pas les données réelles.

un dump SQL typique est restauré avec psql:

psql (connection options here) database  < yourbackup.sql

ou sinon à partir d'un psql session,

psql (connection options here) database
database=# \i /path/to/yourbackup.sql

Dans le cas de sauvegardes effectuées avec pg_dump -Fc ("format personnalisé"), ce qui n'est pas un simple fichier SQL mais un fichier compressé, vous devez utiliser le pg_restore outil.

Si vous travaillez sur un unix-like, essayez ceci:

man psql
man pg_dump
man pg_restore

sinon, prendre un coup d'oeil à la documentation html. Bonne chance!

39
répondu dschulz 2014-05-10 00:17:05

Le problème avec votre tentative à l' psql la ligne de commande est la direction des barres obliques:

newTestDB-# /i E:\db-rbl-restore-20120511_Dump-20120514.sql   # incorrect
newTestDB-# \i E:/db-rbl-restore-20120511_Dump-20120514.sql   # correct

Pour être clair, psql les commandes commencent par un antislash, donc vous auriez dû mettre \i à la place. Ce qui s'est passé en raison de votre faute de frappe, c'est que psql ignoré tout jusqu'à trouver la première \, qui se trouve être suivi de db et \db se trouve être le psql commande pour l'inscription espaces de table, d'où la raison pour laquelle la sortie était un Liste des tablespaces. Ce n'était pas une liste de "tables par défaut de PostgreSQL" comme vous l'avez dit.

en Outre, il semble que psql attend l' filepath argument pour délimiter les répertoires en utilisant la barre oblique avant indépendamment de L'OS (donc sur Windows ce serait contre-intuitif).

il est intéressant de noter que votre tentative d ' "élever les permissions" n'avait aucun rapport avec le résultat de la commande que vous avez essayé d'exécuter. En outre, vous n'avez pas dit ce qui a causé le censé erreur "Autorisation Refusée".

Enfin, l'extension du fichier de vidage n'est pas grave, en fait, vous n'avez même pas besoin d'une extension. En effet, pgAdmin suggère un .backup extension lors de la sélection d'un nom de fichier de sauvegarde, mais vous pouvez réellement faire ce que vous voulez, encore une fois, y compris n'avoir aucune extension. Le problème est que pgAdmin semble ne permettre qu'une" restauration "de" Custom or tar "ou" Directory " dumps (au moins c'est le cas dans la version MAC OS X de l'application), donc utilisez simplement les psql\i commande comme indiqué ci-dessus.

21
répondu user664833 2015-02-20 21:53:28

En utilisant pg_restore commande vous pouvez restaurer la base de données postgres

premier terminal ouvert

sudo su postgres

Créer une nouvelle base de données

createdb [nom de la base de données] -O [propriétaire]

createdb test_db [-O openerp]

pg_restore-d [Nom de la base de données] [Chemin du fichier dump]

pg_restore -d test_db /home/sagar/Download/sample_dbump

Attendre l'achèvement de la restauration de la base de données.

rappelez-vous que le fichier dump aurait dû lire, écrire, exécuter accès, pour que vous puissiez appliquer la commande chmod

13
répondu Sagar Pise 2014-12-05 09:43:19

1.ouvrez le terminal.

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

your postgres bin - /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.sauvegarde

votre source nom db - mabase

/ opt/PostgreSQL/9.1/bin / pg_dump --host '192.168.1.111' --port 5432 --username " postgres" --pas de mot de passe --format personnalisé --gouttes --fichier "/home/dinesh/db/mydb.de sauvegarde" "mabase"

3.restaurer mydb.fichier de sauvegarde dans la destination.

votre serveur de destination-localhost

votre nom de 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 sauvegarde.

/opt/PostgreSQL/9.1/bin/pg_restore --host = 'localhost' --port 5432 --nom d'utilisateur "postgres" --dbname "mabase" --no-mot de passe --clean "/home/dinesh/db/mydb.de sauvegarde"

7
répondu Dinesh-SriLanka 2013-10-11 06:19:33

en combinant les conseils de MartinP et user664833, j'ai également pu le faire fonctionner. La mise en garde est que l'entrée psql à partir de l'outil GUI pgAdmin via le choix de Plugins...La Console PSQL définit le niveau d'authentification et de permission pour la session psql, vous devez donc avoir les permissions Admin ou CRUD sur la table et peut-être aussi Admin sur la base de données (je n'en suis pas sûr). La commande alors dans la console psql prendrait cette forme:

postgres=# \i driveletter:/folder_path/backupfilename.backup

postgres=# est le psql invite, ne fait pas partie de la commande.

L' .le fichier de sauvegarde inclura les commandes utilisées pour créer la table, de sorte que vous pouvez également obtenir des choses comme "ALTER TABLE ..."commandes dans le fichier qui sont exécutées mais rapportées comme des erreurs. Je suppose que vous pouvez toujours supprimer ces commandes avant d'exécuter la restauration, mais vous êtes probablement plus sûr que désolé de les garder là-dedans, car cela ne causera probablement pas la restauration des données à l'échec. Mais vérifiez toujours pour être sûr que les données que vous vouliez resore en fait là. (Désolé si cela semble être un conseil condescendant pour n'importe qui, mais c'est un oubli qui peut arriver à n'importe qui peu importe combien de temps ils ont été à ce truc -- une distraction d'un moment d'un collègue, un appel téléphonique, etc. et il est facile d'oublier cette étape. Je l'ai fait moi-même en utilisant d'autres bases de données plus tôt dans ma carrière et je me suis demandé "mince, pourquoi je ne vois pas de données de retour de cette requête?"La réponse était que les données n'ont jamais été restaurées, et j'ai juste perdu 2 heures à essayer de chasser bas suspects éventuels bugs qui n'existaient pas.)

5
répondu Matt Campbell 2014-03-10 15:53:12

vous pourriez avoir besoin de définir les permissions au niveau de la base de données qui permet à votre propriétaire de schéma de restaurer le dump.

0
répondu Bill Rosmus 2012-07-29 22:21:18

je trouve que psql.exe est assez difficile avec la direction de la barre oblique, au moins sur les fenêtres (ce qui ressemble ci-dessus).

Voici un exemple. Dans une fenêtre cmd:

C:\Program Files\PostgreSQL.2\bin>psql.exe -U postgres
psql (9.2.4)
Type "help" for help.

postgres=# \i c:\temp\try1.sql    
c:: Permission denied
postgres=# \i c:/temp/try1.sql
CREATE TABLE
postgres=#

Vous pouvez le voir, il échoue lorsque j'ai une utilisation "normale" de windows barres obliques dans un \i appel. Cependant les styles slash fonctionnent si vous les Passez comme paramètres d'entrée à psql.exe par exemple:

C:\Program Files\PostgreSQL.2\bin>psql.exe -U postgres -f c:\TEMP\try1.sql
CREATE TABLE

C:\Program Files\PostgreSQL.2\bin>psql.exe -U postgres -f c:/TEMP/try1.sql
CREATE TABLE

C:\Program Files\PostgreSQL.2\bin>
0
répondu MartinP 2013-05-14 18:10:14