restauration de la base de données Postgres: pg_restore -vs- en utilisant simplement psql

16

Je vide ma base de données Postgres en utilisant pg_dump (au format texte brut) et je la restaure simplement en utilisant psql (avec l' -foption).

Ce qui pose la question: est-ce que je manque quelque chose en n'utilisant pas pg_restore qui semble être un outil de restauration spécialisé (par rapport au générique psql)?

Je peux contrôler des options comme la désactivation des déclencheurs et autres en utilisant des pg_dumpparamètres. À quoi pg_restoresert-il alors? formats de vidage en texte brut?

Marcus Junius Brutus
la source
4
Extrait du manuel : " pg_restore est un utilitaire pour restaurer une base de données PostgreSQL à partir d'une archive créée par pg_dump dans l'un des formats de texte non brut "
a_horse_with_no_name

Réponses:

19

Si vous avez créé un vidage au format SQL, tout ce que vous pouvez utiliser est psql.

Si vous avez créé un vidage au format personnalisé ( pg_dump -Fc) ou au format répertoire ( pg_dump -Fd), vous pouvez et devez utiliser pg_restore.

Les vidages de format personnalisé et de répertoire offrent de nombreux avantages par rapport aux vidages de script SQL simples, et je les utilise exclusivement. Vous pouvez sélectivement restaurer uniquement certaines tables / schémas, pouvez choisir d'inclure uniquement le schéma, uniquement les données, ou les deux au moment de la restauration, etc. De nombreuses options que vous devez spécifier à la pg_dumpfois avec des vidages au format SQL peuvent être choisies lors de la restauration temps si vous utilisez un vidage format personnalisé et pg_restore.

S'il n'y avait pas de compatibilité descendante, je suis sûr que la valeur par défaut pg_dumpserait le -Fcformat (personnalisé).

Vous ne pouvez pas convertir un vidage au format SQL au format personnalisé ou au format répertoire sans le restaurer dans une base de données PostgreSQL, puis vider la base de données restaurée.

Craig Ringer
la source
Est-il également possible de renommer des fonctions par lots et de manipuler des données comme vous le feriez dans un fichier sql avec une bonne expression rationnelle?
velop
1
Non, mais vous pouvez pg_restoresans dbnameargument le transformer en un vidage au format SQL si vous en avez besoin. Vous ne pouvez pas faire l'inverse.
Craig Ringer
@CraigRinger y a-t-il une différence de vitesse en utilisant psql vs en utilisant pg_dump pour la restauration?
Nikunj Sardhara
2
@NikunjSardhara Pas habituellement, mais pg_restoreprend en charge la restauration parallèle, et si vous l'utilisez, ce sera BEAUCOUP plus rapidement.
Craig Ringer