He creado un nuevo volcado de base de datos desde un servidor de producción con los indicadores --data-only
y --column-inserts
, por lo que solo tengo un montón de instrucciones de inserción para insertar datos cuando realizo una restauración en un servidor intermedio.
pg_dump -h localhost -U adminuser --data-only --column-inserts maindb > maindb.sql
¿Cómo elimino primero todos los datos en la base de datos del servidor de ensayo, antes de restaurar los datos del volcado de producción?
Solo quiero eliminar todos los datos para no tener que soltar y crear la base de datos y todo eso. Solo quiero eliminar datos e insertar nuevos datos, eso es todo.
No tengo la opción de soltar y crear la base de datos por varias razones. Tendré que eliminar todos los datos y solo insertarlos, así que sea lo que sea necesario para encontrar la forma de hacerlo, estoy dispuesto a hacerlo, pero obviamente necesito ayuda para comenzar.
También necesito automatizar este proceso. Automatizará "volcar datos de producción de base de datos", luego "eliminar datos en la preparación de base de datos" y luego "restaurar los datos en la preparación de base de datos". Solo necesito ayuda en la parte "eliminar datos en la preparación de db".
Estoy corriendo en PostgreSQL 9.5.2
fuente
TRUNCATE table1, table2, ... <list of all tables>;
? ¿Ambos hacen lo mismo?pg_restore tiene un indicador --clean (o posiblemente --create) que eliminará automáticamente los datos antes de ejecutar operaciones
La excelente documentación debería ayudarte mucho ...
Solo para aclarar, en caso de que sea confuso:
Esto no eliminará la base de datos real ... solo las tablas / vistas / etc.
Si, por alguna razón, no es aceptable soltar y volver a crear las tablas, entonces tendrá que esforzarse más para crear manualmente un script que cree un
data only
volcado de la base de datos de origen, problemasTRUNCATE
oDELETE
en la base de datos de destino, y luego carga el volcado de datos. No hay una forma rápida / hábil de hacer esto, que yo sepa.fuente
La consulta anterior generará consultas truncadas para todas las tablas en la base de datos.
fuente
Nota: mi respuesta se trata de eliminar realmente las tablas y otros objetos de la base de datos; para eliminar todos los datos en las tablas, es decir, truncar todas las tablas , Endre Both ha proporcionado una declaración similarmente bien ejecutada (ejecución directa) un mes después.
Para los casos en los que no puede simplemente
DROP SCHEMA public CASCADE;
,DROP OWNED BY current_user;
o algo así, aquí hay un script SQL independiente que escribí, que es seguro para las transacciones (es decir, puede ponerlo entreBEGIN;
yROLLBACK;
para probarlo oCOMMIT;
hacer el acto) limpia "todos" los objetos de la base de datos ... bueno, todos los que se usan en la base de datos que usa nuestra aplicación o podría agregar sensatamente, que es:CHECK
,UNIQUE
)VIEW
s (normal o materializado)public
los esquemas no predeterminados (es decir, no o internos de la base de datos) que "nosotros" poseemos: el script es útil cuando se ejecuta como "no un superusuario de base de datos"; un superusuario puede descartar todos los esquemas (sin embargo, los realmente importantes aún se excluyen explícitamente)No se descartan (algunos deliberados; otros solo porque no tenía ningún ejemplo en nuestra base de datos):
public
esquema (p. ej. para cosas proporcionadas por la extensión en ellos)Esto es realmente útil para los casos en que el volcado que desea restaurar es de una versión de esquema de base de datos diferente (por ejemplo, con Debian
dbconfig-common
, Flyway o Liquibase / DB-Manul) que la base de datos en la que desea restaurarlo.También tengo una versión que elimina "todo excepto dos tablas y lo que les pertenece" (una secuencia, probada manualmente, lo siento, lo sé, aburrida) en caso de que alguien esté interesado; La diferencia es pequeña. Contáctame o consulta este repositorio si estás interesado.
SQL
Probado, excepto adiciones posteriores (
extensions
contribuido por Clément Prévost ), en PostgreSQL 9.6 (jessie-backports
). Eliminación agregada probada en 9.6 y 12.2, eliminación de procedimiento probada también en 12.2. ¡Correcciones de errores y mejoras adicionales son bienvenidas!fuente