Utilisation pg_restore restaurer à partir d'une version plus récente de PostgreSQL
J'ai un (de production) DB serveur exécutant PostgreSQL v9.0 et développement d'une machine de course de PostgreSQL v8.4. Je voudrais prendre un dump de la base de données de production et de l'utiliser sur la machine de développement. Je ne peux pas mettre à niveau les postgres sur le dev de la machine.
Sur la production de la machine, je lance:
pg_dump -f nvdls.db -F p -U nvdladmin nvdlstats
Sur le développement de la machine, je lance:
pg_restore -d nvdlstats -U nvdladmin nvdls.db
Et j'ai eu cette erreur:
pg_restore: [archiver] unsupported version (1.12) in file header
Cela se produit indépendamment de savoir si j'choisissez personnalisé, goudron, ou plain_text format de dumping.
J'ai trouvé une discussion en ligne qui suggère que je devrais utiliser une version plus récente de pg_restore
sur le dev de la machine. J'ai essayé en copiant simplement le 9.0 binaire pour le dev de la machine, mais cela ne marche pas (pas de façon inattendue) en raison de la liaison des problèmes.
J'ai pensé que le point de l'aide d'un plain_text dump qu'il soit brut, SQL portable. Apparemment pas.
Comment puis-je obtenir la version 9.0 DB dans mon 8.4 installer?
l'Exportation et l'Importation de PostgresSQL avec pgAdmin III
OriginalL'auteur Phrogz | 2011-01-05
Vous devez vous connecter pour publier un commentaire.
pg_restore est seulement pour la restauration de décharges pris dans le "custom" format.
Si vous faites un "texte brut" dump vous devez utiliser psql pour exécuter le script SQL généré:
OriginalL'auteur a_horse_with_no_name
À l'aide de pg_dump/pg_restore pour se déplacer de 9.0 8.4 n'est pas pris en charge uniquement aller de l'avant est prise en charge.
Cependant, vous pouvez généralement obtenir les données de l'autre côté (dans un seul dump), et dans certains cas, vous pouvez obtenir le schéma mais c'est surtout de la chance, cela dépend des fonctionnalités que vous êtes en utilisant.
Vous devriez normalement utiliser la version cible de pg_dump et pg_restore - sens dans ce cas, vous devez utiliser les fichiers binaires à partir de 8.4. Mais vous devez utiliser le même version de pg_dump et pg_restore. Les deux outils fonctionnent bien sur le réseau, donc il ne devrait pas être nécessaire de copier les fichiers binaires autour de.
Et comme a_horse_with_no_name dit, vous pouvez être mieux à l'aide de pg_dump en clair de mode qui vous permettra de main-modifier le dump si nécessaire. En particulier, vous pouvez faire un schéma uniquement dump (avec-s) et les données d'un seul dump - seulement le schéma de vidage est susceptible de nécessiter une modification.
Vous pouvez l'utiliser à distance aussi longtemps que vous avez la possibilité d'utiliser SSH port forwarding (ou similaire).
OriginalL'auteur Magnus Hagander
Si la 9.0 base de données contient les bytea colonnes, puis des grands problèmes de l'attendent.
Ces colonnes seront exportés par pg_dump à l'aide de la "hex" représentation et apparaissent dans votre fichier de vidage comme:
SÉLECTIONNEZ pg_catalog.lowrite(0, '\x0a2')
Importe quelle version de postgres backend ci-dessous 9.0 connaît pas la représentation hexadécimale de la bytea, et je ne peux pas trouver une option pour dire pg_dump sur la 9.0 côté à ne pas l'utiliser. Le réglage par défaut "bytea_output" réglage de s'ÉCHAPPER de la base de données ou le serveur tout entier est apparemment ignoré par pg_dump.
Je suppose qu'il serait possible de post-traiter le fichier de vidage et le fait de changer à chaque codé en hexadécimal bytea de la valeur à une fuite de l'un, mais le risque de untraceably corrompre le genre de choses qui sont normalement stockées dans un bytea (images, Pdf, etc) ne m'excite.
OriginalL'auteur Matthew
J'ai résolu ce problème par la mise à niveau de postgresql à partir de 8.X pour 9.2.4. Si vous utilisez l'infusion sur Mac OS X, utilisez -
Une fois que c'est fait, assurez-vous que votre nouvelle installation de postgres est au top de votre chemin. Ça va ressembler à quelque chose comme (selon la version d'installation du chemin d'accès) -
OriginalL'auteur Blake
J'ai eu même problème. J'ai utilisé pgdump et psql pour l'exportation/importation DB.
1.Ensemble PGPASSWORD
2.L'exportation DB avec pg_dump
/opt/db.est chemin d'accès de vidage. Vous pouvez spécifier votre propre.
3.Puis de nouveau PGPASSWORD de vous un autre hôte. Si l'hôte est la même ou le mot de passe est le même, alors ce n'est pas nécessaire.
4.Importation db à votre autre hôte
Si le nom d'utilisateur est différent alors à trouver et à remplacer par votre nom d'utilisateur local en db.fichier. Et assurez-vous sur le nom d'utilisateur est remplacée et non des données.
OriginalL'auteur Somnath Muluk