Comment obtenir une sauvegarde et un test complets et complets de la base de données PostgreSQL

45

J'espérais pouvoir obtenir une réponse claire sur la manière de garantir une sauvegarde Postgres complète, comme vous le feriez avec MS SQL Server, puis de prendre en charge les utilisateurs orphelins.

D'après ce que j'ai lu, et cela peut être faux, trouver un bon blog PostgreSQL a été un défi, alors n'hésitez pas à m'en recommander, je dois comprendre comment cette application fonctionne pour pouvoir faire confiance à mes sauvegardes et à Slony. réplication. Un développeur a restauré une sauvegarde de PgadminIII via custom, directoryet le tarformat tout en sélectionnant OIDs, mais il a dit que deux d’entre eux ne se sont pas chargés, tarmais que c’était uniquement le répertoire, pas les données. Je suis vraiment confus maintenant.

  1. J'utilise PGAdminIII, il a une option pg_dumpet pg_dumpall. Je veux sauvegarder tout ce dont j'ai besoin pour tester, restaurer cette base de données quelque part et vérifier que oui, toutes les données dont nous avons besoin et notre sauvegarde sont bonnes. Finalement, je veux écrire un script de restauration automatique, mais un jour à la fois.

pg_dumpalla apparemment une -globalsoption censée tout sauvegarder, mais l’aide pour pg_dumpallaffiche -g, --globals-only dump only global objects, no databasesune --globalsoption , pas une option.

Je pensais pg_dumpallau moins sauvegarder les clés étrangères, mais même cela semble être une "option". Selon la documentation , même si pg_dumpallje dois utiliser une -ooption pour sauvegarder les clés étrangères, je ne peux pas vraiment imaginer quand je ne voudrais pas sauvegarder les clés étrangères et cela aurait plus de sens comme options par défaut.

  1. Comment puis-je prendre en charge les utilisateurs orphelins et valider que j'ai tout? J'aimerais effectivement restaurer mon fichier de sauvegarde sur un autre serveur et vérifier que tout fonctionne. Si quelqu'un a des suggestions sur la manière de réaliser une sauvegarde réelle dans PostgreSQL et de la restaurer, je vous en serais très reconnaissant.

J'avais un serveur PostgreSQL mais je n'arrive toujours pas à comprendre pourquoi l'application ne sauvegarde pas OIDpar défaut! Il semble que 99,9% du temps, vous voudriez cela.

MISE À JOUR 1:

La documentation de Postgres mentionne que l' globalsoption que je cherchais semble être une option par défaut pour cette version, mais qu'elle en a toujours besoin -o. Si quelqu'un peut vérifier ou me donner un exemple de commande pour restaurer une seule base de données ailleurs avec tout ce dont il a besoin, je l'apprécierais.

Éditer: le site demande au site de montrer le caractère unique de cette question en modifiant ma question. Cette question soulève la question et donne de la clarté sur les OID dans les sauvegardes, la différence entre globals et non globals, ainsi que sur les recommandations de restauration des tests pour garantir la qualité de la sauvegarde, par opposition à une simple sauvegarde. Grâce aux réponses que j’ai pu sauvegarder, comprendre globals / oids, et lancé un processus de restauration test toutes les nuits sur Postgres à l’aide de tâches cron. Merci pour l'aide!

Ali Razeghi
la source
Duplication possible de la sauvegarde complète de la base de données PostgreSQL
raphael

Réponses:

58

Vous pouvez vider l'intégralité du cluster PostgreSQL avec pg_dumpall. C'est toutes les bases de données et tous les globals pour un seul cluster. À partir de la ligne de commande sur le serveur, je ferais quelque chose comme ceci. (Mine écoute sur le port 5433 et non sur le port par défaut.) Vous pouvez ou non avoir besoin de l'option --clean.

$ pg_dumpall -U postgres -h localhost -p 5433 --clean --file=dump.sql

Cela inclut les éléments globaux - informations sur les utilisateurs et les groupes, les espaces de table, etc.

Si je devais sauvegarder une base de données unique et la déplacer sur un serveur de travail , je viderais la base de données avec pg_dump, puis les fichiers globaux avec

  • pg_dumpall --globals-only, ou
  • pg_dumpall --roles-only (si vous avez seulement besoin de rôles)

comme ça.

$ pg_dump -U postgres -h localhost -p 5433 --clean --file=sandbox.sql sandbox
$ pg_dumpall -U postgres -h localhost -p 5433 --clean --globals-only --file=globals.sql

Les sorties ne sont que des fichiers texte.

Après avoir déplacé ces fichiers vers un autre serveur, chargez d'abord les globales, puis le vidage de la base de données.

$ psql -U postgres -h localhost -p 5433 < globals.sql
$ psql -U postgres -h localhost -p 5433 < sandbox.sql

Je pensais que pg_dumpall sauvegarderait au moins les clés étrangères, mais même cela semble être une "option". Selon: http://www.postgresql.org/docs/9.1/static/app-pg-dumpall.html même avec pg_dumpall, je dois utiliser une option -o pour sauvegarder les clés étrangères.

Non, cette référence indique "Utilisez cette option si votre application fait référence aux colonnes OID d'une manière ou d'une autre (par exemple, dans une contrainte de clé étrangère). Sinon, cette option ne devrait pas être utilisée." (Je souligne.) Je pense qu'il est peu probable que votre application fasse référence aux colonnes OID. Vous n'avez pas besoin d'utiliser cette option pour "sauvegarder les clés étrangères". (Lisez le fichier de vidage dans votre éditeur ou votre visionneuse de fichiers.)

Mike Sherrill 'Rappel de chat'
la source
3
Le nom de la base de données ne manque-t-il pas dans la ligne où sandbox.sql est importé? psql -U postgres -h localhost -p 5433 sandbox < sandbox.sql
SebK
Il voit que la pg_dumpallversion 9.5 ne fonctionne pas correctement avec les NULLvaleurs lors de l'utilisation COPY. Je reçois beaucoup d'erreurs comme celle-ci: psql:/tmp/dumpall.sql:4133559: invalid command \N psql:/tmp/dumpall.sql:4133560: invalid command \.Lors de l'importation dans Postgres 10 avecpsql -f /tmp/dumpall.sql
piotrekkr