PostgreSQL - dump chaque table dans un fichier différent
J'ai besoin d'extraire les fichiers SQL à partir de plusieurs tables d'une base de données PostgreSQL. C'est ce que j'ai trouvé jusqu'à présent:
pg_dump -t 'thr_*' -s dbName -U userName > /home/anik/psqlTest/db_dump.sql
Cependant, comme vous le voyez, toutes les tables qui commencent par le préfixe thr
sont exportées vers un unique fichier (db_dump.sql
). J'ai près de 90 tables au total pour extraire SQL, donc, il est indispensable que les données soient stockées dans des fichiers séparés.
Comment puis-je le faire? Merci à l'avance.
Vous devez expliquer pourquoi vous voulez de 90 différents fichiers d'exportation pour MySQL, sauvegarde partielle? Si vous essayez de faire une sauvegarde/export puis IMSoP la réponse de ne pas garantir le même cliché pour chaque table.
Bon point, je n'avais pas pensé à la non-atomicité. Je suppose que vous pourriez créer un "custom" sauvegarde de la DB et ensuite extraire les différentes tables de l'utilisation
Bon point, je n'avais pas pensé à la non-atomicité. Je suppose que vous pourriez créer un "custom" sauvegarde de la DB et ensuite extraire les différentes tables de l'utilisation
pg_restore
.OriginalL'auteur Hasan Iqbal | 2013-08-20
Vous devez vous connecter pour publier un commentaire.
Si vous êtes heureux de coder en dur la liste des tables, mais juste envie de chaque être dans un autre fichier, vous pouvez utiliser un script shell boucle pour exécuter le
pg_dump
commande plusieurs fois, la substitution du nom de la table à chaque tour de la boucle:MODIFIER: Cette approche peut être étendue pour obtenir la liste des tables de manière dynamique par l'exécution d'une requête par le biais de psql et l'alimentation de ces résultats dans la boucle au lieu d'une liste codée en dur:
Ici
psql -t -c "SQL"
s'exécuteSQL
et sorties les résultats avec aucun en-tête ou du pied de page, car il y a une seule colonne sélectionnée, un nom de table sur chaque ligne de la sortie capturé par$(command)
, et de votre environnement de ligne de commande de la boucle à travers eux un à la fois.Alternativement, vous pouvez faire une requête de la DB à partir d'un script shell pour la liste des tables et ensuite une boucle sur la liste.
pensé que vous pourriez dire que, c'est pourquoi j'ai ajouté de la mise en garde au début de la réponse. J'ai édité ma réponse à la requête de la base de données pour la liste de la première, comme Igor suggère.
OriginalL'auteur IMSoP
Depuis la version 9.1 de PostgreSQL (Sept. 2011), on peut utiliser la format de répertoire de sortie lors de sauvegardes
et 2 versions/2 ans après (PostgreSQL 9.3), le --emplois/-j le rend encore plus efficace pour la sauvegarde de tous les objets en parallèle
mais ce que je ne comprends pas dans votre question initiale, c'est que vous utilisez l'option-s qui exporte uniquement les définitions d'objets (schéma), pas de données.
si vous voulez que les données, vous ne devez pas utiliser -s, mais plutôt un (données uniquement) ou pas de possibilité d'avoir de schéma+données
donc, pour la sauvegarde de tous les objets (tables...) qui commence par " th " pour la base de données dbName sur le répertoire dbName_objects/avec 10 en même temps que l'emploi/processus (augmentation de la charge sur le serveur) :
(vous pouvez aussi utiliser l'option-a/-s si vous voulez que les données ou le schéma des objets)
en conséquence, le répertoire sera rempli avec une table des matières.dat (table des matières de tous les objets) et un fichier par objet (.dat.gz) dans un format compressé
chaque fichier est nommé d'après son numéro d'objet, et vous pouvez récupérer la liste à la suite de pg_restore commande:
afin d'avoir chaque fichier non compressé (raw SQL)
OriginalL'auteur Cyril Chaboisseau
Ce script bash va faire une sauvegarde avec un fichier par table:
OriginalL'auteur rubo77
(pas assez de réputation pour commenter le poteau droit)
J'ai utilisé ton script avec quelques corrections et quelques modifications pour mon propre usage, peut être utile pour les autres:
(Je pense que vous avez oublié d'ajouter $DB dans la pg_dumb commande, et j'ai ajouté un -w, pour un script automatisé, il est préférable de ne pas avoir un psw invite je suppose que, pour cela, j'ai créé un ~/.pgpass fichier avec mon mot de passe en elle
J'ai aussi donné à l'utilisateur pour la commande pour savoir quel mot de passe pour aller chercher dans .pgpass)
Espérons que cela aide quelqu'un un jour.
OriginalL'auteur Rousseau Alban