Estoy escribiendo un script de shell (se convertirá en un cronjob) que:
1: volcar mi base de datos de producción
2: importar el volcado a mi base de datos de desarrollo
Entre los pasos 1 y 2, necesito borrar la base de datos de desarrollo (¿eliminar todas las tablas?). ¿Cómo se logra esto mejor desde un script de shell? Hasta ahora, se ve así:
#!/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
database
backup
postgresql
Hoff
fuente
fuente
dbname='db_name' && dropdb $dbname && createdb $dbname && psql -d $dbname -f dump.sql
Respuestas:
Simplemente soltaría la base de datos y luego la volvería a crear. En un sistema UNIX o Linux, eso debería hacerlo:
Así es como lo hago, en realidad.
fuente
createdb --owner=db_owner [--template=template0 --encoding=UTF8] db_name
agrego los dos últimos por defecto a todas las bases de datosSi realmente no necesita una copia de seguridad de la base de datos volcada en el disco en un formato de archivo de script .sql de texto plano, puede conectarse
pg_dump
y conectarsepg_restore
directamente a través de una tubería.Para soltar y volver a crear tablas, puede usar la
--clean
opción de línea depg_dump
comandos para emitir comandos SQL para limpiar (soltar) los objetos de la base de datos antes de (los comandos para) crearlos. (Esto no eliminará toda la base de datos, solo cada tabla / secuencia / índice / etc. antes de volver a crearlos).Los dos anteriores se verían así:
fuente
Aunque la siguiente línea se toma de un script por lotes de Windows, el comando debería ser bastante similar:
Este comando se utiliza para borrar toda la base de datos, dejándola caer. El
$DATABASE
(en Windows debería estar%DATABASE%
) en el comando es una variable de entorno de estilo Windows que se evalúa como el nombre de la base de datos. Tendrá que sustituir eso por sudevelopment_db_name
.fuente
dropdb
y los ya disponiblescreatedb
? Si puede ejecutar psql, también puede ejecutarlos.Para volcar:
Restaurar:
fuente
Si desea limpiar su base de datos llamada "example_db":
1) Inicie sesión en otra base de datos (por ejemplo, 'postgres'):
2) Eliminar su base de datos:
3) Recrea tu base de datos:
fuente
He usado:
fuente
Nota: mi respuesta es sobre 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 soltar todo 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 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