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.
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!
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.
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
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"
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
où 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.)
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.
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>