Comment créer une sauvegarde d'une seule table dans une base de données postgres?

160

Existe-t-il un moyen de créer une sauvegarde d'une seule table dans une base de données à l'aide de postgres? Et comment? Cela fonctionne-t-il également avec la commande pg_dump?

Elitmiar
la source

Réponses:

212

Utilisez --tablepour indiquer pg_dumpquelle table il doit sauvegarder:

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename dbname
Frank Heikens
la source
9
Et comment restaurer ce fichier de sauvegarde. (.backup), j'ai utilisé pg_restore --host localhost --port 5432 --username postgres --dbname "anydb" --table public.tablename -Ft --verbose "/path/filename.backup"mais il est sorti:pg_restore: [tar archiver] corrupt tar header found in --
Anderson Dorregaray Linares
13
psql -U username -d database -1 -f your_dump.sql
rnaud
5
que vouliez-vous dire: abstract_file_path?
bandungeuy
3
Je ne sais pas pourquoi cette réponse a été votée à la hausse, les gens cliquent sur +1 sans inspecter les choses eux-mêmes ni essayer. Le problème avec cette réponse, qui la rend totalement inutile, est que la solution / les commandes données n'exportent pas les séquences créées sur la table (clé primaire), et donc l'importation échoue. Je ne connais aucune base de données PG de production unique qui n'utilise pas de clés primaires avec des séquences. C'est une demi-réponse, ne répond pas complètement à la question et nécessite un travail supplémentaire pour exporter / importer une seule table.
user10664542
1
avec une torsion sudo légèrement différente de cela, je me suis retrouvé avec une erreur d'autorisation sur le vidage de fichiers (assez logique puisque l'utilisateur postgres n'a pas d'accès en écriture sur mes répertoires) et j'ai eu une erreur d'indicateur inconnue pour --ignore-version. La réponse de Prashant Kumar, qui est plus simple, a fonctionné pour moi.
JL Peyret
84

Si vous êtes sur Ubuntu,

  1. Connectez-vous à votre utilisateur postgres sudo su postgres
  2. pg_dump -d <database_name> -t <table_name> > file.sql

Assurez - vous que vous exécutez la commande où l' postgresutilisateur dispose des autorisations d'écriture (exemple: /tmp)

Éditer

Si vous souhaitez vider le fichier .sql sur un autre ordinateur, vous devrez peut-être envisager d'ignorer les informations du propriétaire enregistrées dans le fichier .sql.

Vous pouvez utiliser pg_dump --no-owner -d <database_name> -t <table_name> > file.sql

Sri Harsha Kappala
la source
1
Et si vous voulez toutes les tables, sans avoir à spécifier le nom de chacune?
shekeine
3
Supprimez simplement l'option -t! pg_dump -d <database_name> > file.sql
Sri Harsha Kappala
4
Je ne sais pas pourquoi mais l'option -d n'est pas valide pour psql9.3 et la commande donnée ne fonctionne pas pour moi. Le fonctionnement est pg_dump -U nom_utilisateur nom_base -t nom_table> nom_fichier .
serkan kucukbay
pg_dump -t <table_name> <database_name> > file.sql
Sriram
@ user10664542: Veuillez lire le manuel, en particulier cette section: «Pour cela,« table »comprend les vues, les vues matérialisées, les séquences et les tables étrangères».
Frank Heikens
42

pg_dump -h localhost -p 5432 -U postgres -d mydb -t ma_table> backup.sql

Vous pouvez prendre la sauvegarde d'une seule table, mais je suggérerais de prendre la sauvegarde de toute la base de données, puis de restaurer la table dont vous avez besoin. Il est toujours bon d'avoir une sauvegarde de la base de données entière.

9 façons d'utiliser pg_dump

Prashant Kumar
la source
Je ne sais pas pourquoi cette réponse a été votée à la hausse, les gens cliquent sur +1 sans inspecter les choses eux-mêmes ni essayer. Le problème avec cette réponse, qui la rend totalement inutile, est que la solution / les commandes données n'exportent pas les séquences créées sur la table (clé primaire), et donc l'importation échoue. Je ne connais aucune base de données PG de production unique qui n'utilise pas de clés primaires avec des séquences. C'est une demi-réponse, ne répond pas complètement à la question et nécessite un travail supplémentaire pour exporter / importer une seule table.
user10664542
comme indiqué ci-dessus, j'ai un fort soupçon user10664542, sans aucune réponse SO postgres à son nom, est hors de sa profondeur ici. bien que la séquence apporte des complications supplémentaires, il y a suffisamment de votes positifs sur les réponses similaires pour que les gens les aient probablement fait fonctionner même s'ils ont dû ajuster la séquence après coup. si je devais restaurer mon vidage, je chercherais des moyens de mettre à jour le dernier identifiant de la séquence à partir d'un max(id)sur ma table. c'est la réponse qui a fonctionné et je suis convaincu, en regardant le sql généré, que j'aurais pu le restaurer.
JL Peyret
9

Si vous préférez une interface utilisateur graphique, vous pouvez utiliser pgAdmin III (Linux / Windows / OS X). Faites simplement un clic droit sur la table de votre choix, puis «sauvegarde». Cela créera une pg_dumpcommande pour vous.

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

Franck Dernoncourt
la source
2

En plus de la réponse de Frank Heiken, si vous souhaitez utiliser des INSERTdéclarations à la place de copy from stdin, vous devez spécifier le --insertsdrapeau

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename --inserts dbname

Notez que j'ai omis le --ignore-versiondrapeau, car il est obsolète.

user3207874
la source
Je ne sais pas pourquoi cette réponse a été votée à la hausse, les gens cliquent sur +1 sans inspecter les choses eux-mêmes ni essayer. Le problème avec cette réponse, qui la rend totalement inutile, est que la solution / les commandes données n'exportent pas les séquences créées sur la table (clé primaire), et donc l'importation échoue. Je ne connais aucune base de données PG de production unique qui n'utilise pas de clés primaires avec des séquences. C'est une demi-réponse, ne répond pas complètement à la question et nécessite un travail supplémentaire pour exporter / importer une seule table.
user10664542