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

18
demandé sur Adam Matan 2010-01-22 17:07:10

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.

29
répondu Adam Matan 2012-10-16 22:14:43

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.

6
répondu 2010-01-22 14:28:06

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.

2
répondu ZombieSheep 2010-01-22 14:10:23

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"
1
répondu mYnDstrEAm 2017-03-29 12:06:56

vous pouvez supprimer tous les enregistrements de votre base de données sans restriction de clés étrangères en suivant trois étapes

  1. prenez le script de votre base de données
    1. clic droit sur votre base de données (votre nom de base de données)
    2. cliquez sur tâche puis sur "Générer script"
    3. Spécifier l'emplacement
  2. supprimer votre base de données
  3. 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

-1
répondu syed irfan 2016-05-14 12:12:09