Comment vider une base de données SQL?
je cherche un moyen simple de supprimer toutes les données d'une base de données et de conserver la structure (table, relation, etc...). J'utilise postgreSQL mais je pense que, s'il y a une commande pour faire ça, ce n'est pas spécifique à postgres.
Merci,
Damien
5 réponses
vider le schéma à l'aide de pg_dump
. déposez la base de données, recréez-la et chargez le schéma.
Dump vous le schéma de base de données (le-s de la balise) dans un fichier:
pg_dump -s -f db.dump DB-NAME
Supprimer la base de données:
dropdb DB-NAME
Recréer:
createdb DB-NAME
Restaurer le schéma uniquement:
pg_restore db.dump > psql DB-NAME
cela devrait fonctionner sur PostgreSQL; D'autres SGBD pourraient avoir leurs propres outils pour cela. Je ne sais pas du tout générique outil pour le faire il.
EDIT:
suivant les commentaires, vous pouvez sauter le dropdb
commande, et créez simplement une autre base de données avec le schéma abandonné. Si tout va bien, vous pouvez supprimer l'ancienne base de données:
pg_dump -s -f db.dump DB-NAME
createdb DB-NEW-NAME
pg_restore db.dump > psql DB-NEW-NAME
à ce point, vous avez la base de données complète à DB-NAME, et un schéma vide à DB-NEW-NAME. une fois que vous êtes sûr que tout est OK, utilisez dropdb DB-NAME
.
Vous pouvez faire quelque chose comme ceci:
export PGUSER=your_pg_user
export PGHOST=database.host
export PGPORT=port
export PGDATABASE=your_database
psql -qAtX -c "select 'TRUNCATE table ' || quote_ident(table_schema) || '.' || quote_ident(table_name) || ' CASCADE;' from information_schema.tables where table_type = 'BASE TABLE' and not table_schema ~ '^(information_schema|pg_.*)$'" | psql -qAtX
Il fera ce qui est nécessaire.
bien sûr, ces exportations ne sont pas nécessaires, mais elles simplifieront l'exécution de 2 copies de psql sans avoir à leur donner tous les commutateurs standard-U, -D, et ainsi de suite.
une chose cependant-en utilisant TRUNCATE pour le faire, bien que plus rapide que Supprimer, a ses somnambules - par exemple - il n'est pas répliqué par Slony et tout autre système de réplication qui fonctionne sur les déclencheurs. À moins que vous ne travailliez sur PostgreSQL 8.4, et que votre réplication sache comment utiliser des déclencheurs sur TRUNCATE.
Je ne suis pas un gars de Postgres, mais une option serait d'itérer à travers les tables et d'émettre un troncature commande contre chacune. Vous devrez tenir compte des relations possibles, mais vous ne pourrez pas supprimer les données de référence avant les données qui s'y rapportent, par exemple.
Dans pgAdmin vous pouvez faire:
- clic droit sur la base de données- > sauvegarde, sélectionnez "schéma seulement"
- Chute de la base de données
- Créer une nouvelle base de données et le nom comme l'ancien
- droit-cliquez sur la nouvelle base de données -> restaurer -> sélectionnez la sauvegarde, sélectionnez "schéma seulement"
vous pouvez supprimer tous les enregistrements de votre base de données sans restriction de clés étrangères en suivant trois étapes
- prenez le script de votre base de données
- clic droit sur votre base de données (votre nom de base de données)
- cliquez sur tâche puis sur "Générer script"
- Spécifier l'emplacement
- supprimer votre base de données
- recréer une base de données avec le même nom et exécuter le script généré
ainsi vous pouvez vider toute votre base de données