J'ai un dB PostgreSQL avec environ 85 tables. Je fais des sauvegardes régulièrement à l'aide de Il y a deux tables: 1) Lorsque je prends la DUMP DB, les entrées de la table Y a-t-il une solution pour cela? Y a-t-il une autre méthode de sauvegarde réalisable? P> pg_dump code> (via php-pgadmin) en mode copie et la taille du fichier de sauvegarde est de près de 10-12 Mo. Maintenant, le problème que je suis confronté est que chaque fois que j'essaie de restaurer la base de données, un problème de contrainte de clé étrangère se produit. Le scénario est comme suit: p>
utilisateurs code> et 2)
zones code>. J'ai stocké l'identifiant de la zone dans
des utilisateurs code> pour identifier la zone de l'utilisateur et l'avoir défini comme clé étrangère. P>
Zones code> ne sont arrivées qu'après celle du tableau
des utilisateurs code>. Je pense que c'est dû à la première lettre du nom de la table:
u code> est livré avant
z code>, et donc lorsque je restaure la base de données, un problème de contrainte de clé étrangère se produit et l'exécution s'arrête. Le même problème se produit lorsque j'essaie de restaurer la structure de base de données, il est indiqué que le tableau
Zones code> n'existe pas dans la base de données depuis la structure de
Zones code> vient après celui de
Utilisateurs code> dans le fichier de vidage. P>
6 Réponses :
Utilisation de PGDump (via PHP-PGADMIN) P> blockQuote>
Êtes-vous sûr que phppgadmin utilise pg_dump pour créer des sauvegardes? Je n'ai jamais vu de décharge faite par pg_dump, avoir des problèmes avec des clés étrangères lors de la restauration du décharge. P>
phppgadmin n'est qu'un script PHP et dans la plupart des cas, il n'aura pas d'autorisations pour démarrer un programme comme pg_dump. P>
Je croyais que phppgadminmin utilise pgdump pour faire des sauvegardes ... je me trompe ??? [link] en.wikipedia.org/wiki/phppgadmin[link] dit Peut utiliser pg_dump .. mais je ne sais pas si l'interface utilise pg_dump lorsque le dumping est terminé ... peut-on le confirmer?
Je supprimerais la création FK à l'avant et l'ajoutez à la fin du script. P>
sonne comme si vous obtenez un vidage SQL plutôt qu'un vidage binaire de phppgadmin semble vouloir vouloir Travailler avec des vidages SQL simples plutôt que Vous pouvez également essayer d'ajouter Si phppgadmin ne peut vraiment pas appeler pg_dump code>. Cela vous donnerait un gros tas de SQL avec le schéma (y compris FKS) au sommet suivi d'un tas d'insertions pour recharger les données. Une vidage binaire de
pg_dump code>
vous servirait mieux, on dirait que vous avez besoin d'un peu de configuration supplémentaire pour dire phppgadmin où pg_dump code> est. Ensuite, vous nourririez cette vidage binaire dans
pg_restore code> et
pg_restore code> rétablirait tout dans l'ordre approprié pour éviter les problèmes d'intégrité référentielle (ou, plus précisément,
pg_restore code> restaurerait toutes les données puis ajouter les contraintes). P>
pg_restore code>. Je trouve cela difficile à croire, mais je ne trouve rien dans la documentation sur l'invocation
pg_restore code>. Si cela est vrai, vous devrez probablement modifier la décharge SQL et déplacer tout le FKS jusqu'à la fin. P>
Définir les contraintes reportées ; code>
en haut de votre vidage SQL, qui devrait retarder la vérification des contraintes jusqu'à la fin de la transaction, vous souhaitez également vous assurer que l'ensemble du bloc d'insertions est contenu dans une transaction. < / p>
pg_restore code> alors vous ferez mieux d'utiliser à l'aide de
pg_dump code> et
pg_restore code> à la main afin que vous ayez le Contrôle nécessaire sur vos procédures de sauvegarde. Désolé, mais tout outil d'administration de base de données qui ne peut pas gérer la sauvegarde d'une base de données avec FKS est pire que inutile. Espérons que quelqu'un qui sait que PhPPGADmin, vous montrera et laissez-nous savoir comment utiliser
pg_restore code> avec phppgadmin. P>
Ya pg_restore était ce que je voulais .. Maintenant, la migration de données fonctionne bien, mais un nouveau problème maintenant ... Lorsque j'importe la structure de base de données et l'utilisateur pg_restore pour la restaurer dans une nouvelle base de données, une erreur comme "la séquence x existe déjà" vient .. J'ai constaté que le problème est que le type de données des champs d'auto-incrémentation automatique est BigSerial dans la DBH Dump, de sorte que Postgree crée automatiquement une séquence basée sur le nom de la colonne .. Mais en dessous de l'instruction Créer une table, le Dump a une séquence de création. Déclaration qui crée une séquence avec le même nom que l'une auto générée par Postgres et celle-ci jette une erreur..any Solution?
@MidHun: Vous devriez être de restauration dans une base de données vide, puis pg_restore code> permettra de tout définir. Ou, si vous avez déjà le schéma déjà en place, mais aucune donnée, vous pouvez indiquer
pg_restore code> pour restaurer les données. On dirait que le schéma est déjà là et votre restauration tente de restaurer également le schéma.
Si cela aide n'importe qui: aucune des solutions précédentes suggérées a fonctionné pour moi (certains insertions ont fait référence aux données de référence qui a été larguée ultérieurement sur, indépendante si elle était au format binaire, ou des requêtes SQL simples). P>
Qu'est-ce que j'ai fait: j'ai utilisé Schemaspy , un script qui -among d'autres fonctionnalités, telles que vraiment utiles Diagramme HTML du modèle er sous-jacent - Il génère deux listes très utiles: un "ordre d'insertion" (où toutes vos tables sont répertoriées comme une ordonnance optimale afin d'effectuer des insertions, en tenant compte des restrictions et des dépendances existantes) et d'une "ordonnance de suppression" "(très utile pour déposer des tables). P>
Si vous voulez un échantillon, cochez ce http://schemaspy.sourceforge.net/sample/. En particulier, il existe deux recherches d'échantillons que j'ai mentionnées ci-dessus (essayé de poster des liens directs, mais le mécanisme de prévention du spam me permet de poster 2 liens). P>
Ce sont les exemples de listes !!! schemaspy.sourceforge.net/sample/insertionorder.txt schemaspy.sourceforge.net/sample/deletteorder.txt
J'ai trouvé que vous pouviez ajouter au début de la SQL (cela arrêtera les contrôles de clé étrangère): P>
et à la fin (pour restaurer les chèques): p>
SET Session_Replication_Role = Réplique; CODE> P>
SET Session_Replication_Role = Origine; Code> P>
J'ai fait face à cette situation une fois, j'ai eu la sauvegarde de la structure et des données dans des fichiers séparés, c'est ainsi que j'ai été en mesure de restaurer les informations: restaurer la base de données de la base de données de PG admin p>
En fait, j'envoie le décharge que j'ai reçu de phppgadmin en tant que SQL via une interface phppgadmin .....