2010-01-22 28 views
18

Estoy buscando una manera simple de eliminar todos los datos de una base de datos y mantener la estructura (tabla, relación, etc.). Utilizo postgreSQL pero creo que, si hay un comando para hacerlo, no es específico de postgres.¿Cómo vaciar una base de datos SQL?

Gracias,

Damien

+1

Usted DEBERÍAMOS volcar db para este problema puede ser un funcionamiento no resuelto de manera más eficiente. http://stackoverflow.com/questions/2829158 – ijusti

Respuesta

28

Vuelque el esquema utilizando pg_dump. descartar la base de datos, recrearla y cargar el esquema.

volcar esquema de base de datos (la etiqueta -s) a un archivo:

pg_dump -s -f db.dump DB-NAME 

Eliminar la base de datos:

dropdb DB-NAME 

recrearlo:

createdb DB-NAME 

Restaurar el esquema solamente :

pg_restore db.dump > psql DB-NAME 

Esto debería funcionar en PostgreSQL; Otro DBMS podría tener sus propias herramientas para eso. No sé de ninguna herramienta genérica para hacerlo.

EDIT:

raíz de las observaciones, es posible que desee omitir el comando dropdb, y simplemente crear otra base de datos con el esquema objeto de dumping. Si todo ha ido bien a través, se puede eliminar la antigua base de datos:

pg_dump -s -f db.dump DB-NAME 
createdb DB-NEW-NAME 
pg_restore db.dump > psql DB-NEW-NAME 

En este punto, usted tiene la base de datos completa en el DB-NAME y un esquema vacío en DB-NEW-NAME. después de estar seguro de que todo está bien, use dropdb DB-NAME.

+1

Una opción interesante. Sin embargo, sería cauteloso. Supongo que estoy intrínsecamente nervioso por abandonar toda la base de datos, pero así soy yo. :) – ZombieSheep

+0

No hay que tener cuidado. Si el OP quiere una manera de truncar la base de datos completa de todos modos, entonces esta es una mejor manera de hacerlo. No hay registros para truncar, y mucho más rápido. – Timothy

+0

Es triste darse cuenta de que no hay una manera más simple de hacerlo, gracias de todos modos – Damien

2

Yo no soy un tipo de Postgres, pero una opción sería iterar a través de las mesas y emitir un comando Truncate uno contra uno. Sin embargo, tendrá que tener en cuenta relaciones existentes: por ejemplo, no podrá eliminar datos de referencia antes de los datos que se refieren a él.

6

se puede hacer algo como esto:

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 

que va a hacer lo que sea necesario.

Por supuesto, estas exportaciones no son necesarias, pero harán que sea más fácil ejecutar 2 copias de psql sin tener que darles todos los conmutadores estándar -U, -d, etc.

Sin embargo, una cosa es TRUNCATE para hacerlo, mientras que es más rápido que DELETE, tiene sus efectos negativos, por ejemplo, no está siendo replicado por Slony ni por ningún otro sistema de replicación que funcione con desencadenantes. A menos que esté trabajando en PostgreSQL 8.4, y su réplica sabe cómo usar desencadenadores en TRUNCATE.

-1

su puede borrar todos los registros de la base de datos sin restricciones de claves externas siguiendo tres pasos

  1. guión Toma de su base de datos
    1. haga clic derecho en su base de datos (su nombre y apellidos DB)
    2. haga clic en la tarea y luego "Generar secuencia de comandos"
    3. Especifique la ubicación
  2. eliminar su base de datos
  3. vuelva a crear una base de datos con el mismo nombre y se queda script generado

esta manera se puede vaciar toda su base de datos

+0

" clic derecho en su base de datos "se refiere a un cliente SQL (GUI) específico. Debería mencionar a qué cliente SQL se refiere. –

+0

Microsft Sql servidor @a_horse_with_no_name gracias por señalar –

+2

Bueno, la pregunta es para Postgres, no para SQL Server. –

1

En pgAdmin que puede hacer:

  • base de datos Haga clic derecho -> copia de seguridad, seleccione "esquema única"
  • la caída de la base de datos de
  • Crear una nueva base de datos y el nombre que como el anterior
  • Haga clic derecho en la nueva base de datos -> restaurar -> seleccione la copia de seguridad, seleccionar "sólo esquema"
Cuestiones relacionadas