197 votes

Postgres: efface toute la base de données avant de recréer / re-remplir à partir d'un script bash

J'écris un script shell (qui deviendra un cronjob) qui:

1: vider ma base de données de production

2: importer le dump dans ma base de développement

Entre les étapes 1 et 2, je dois vider la base de développement (supprimer toutes les tables?). Comment cela est-il mieux réalisé à partir d'un script shell? Jusqu'ici, cela ressemble à ceci:

 #!/bin/bash
time=`date '+%Y'-'%m'-'%d'`
# 1. export(dump) the current production database
pg_dump -U production_db_name > /backup/dir/backup-${time}.sql

# missing step: drop all tables from development database so it can be re-populated

# 2. load the backup into the development database
psql -U development_db_name < backup/dir/backup-${time}.sql
 

Merci d'avance!

Martin

264voto

Haes Points 6453

Je laisserais simplement tomber la base de données et ensuite la recréer. Sur un système UNIX ou Linux, cela devrait le faire:

 $ dropdb development_db_name
$ createdb developmnent_db_name
 

C'est comme ça que je le fais, en fait.

113voto

Bandi-T Points 1628

Si vous n'avez pas réellement besoin d'une sauvegarde de la base de données sous-évaluées sur le disque dans un texte brut .sql script format de fichier, vous pouvez vous connecter pg_dump et pg_restore directement sur un tuyau.

Pour supprimer et recréer les tables, vous pouvez utiliser l' --clean option de ligne de commande pour pg_dump d'émettre des commandes SQL à nettoyer (drop) objets de base de données avant (les commandes) de les créer. (Ce ne sera pas tomber l'ensemble de la base de données, seulement chaque table/séquence/index/etc. avant de les recréer.)

Les deux ci-dessus ressemblerait à quelque chose comme ceci:

pg_dump -U username --clean | pg_restore -U username

15voto

Frank Bollack Points 10208

Bien que la ligne suivante soit extraite d'un script batch Windows, la commande doit être assez similaire:

 psql.exe -U username -h localhost -d postgres -c "DROP DATABASE \"%DATABASE%\";"
 

Cette commande est utilisée pour effacer toute la base de données, en la supprimant réellement. Le %DATABASE% de la commande est une variable d'environnement de style Windows qui correspond au nom de la base de données. Vous devrez le remplacer par votre development_db_name .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X