database - una - restaurar base de datos postgresql
Postgres: borre toda la base de datos antes de volver a crear/volver a llenar desde el script bash (5)
Aunque la siguiente línea se toma de una secuencia de comandos de lote de Windows, el comando debería ser bastante similar:
psql -U username -h localhost -d postgres -c "DROP DATABASE /"$DATABASE/";"
Este comando se usa para borrar toda la base de datos, dejándola caer. La $DATABASE
(en Windows debe ser %DATABASE%
) en el comando es una variable de entorno de estilo de Windows que evalúa el nombre de la base de datos. Deberá sustituirlo por su development_db_name
.
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 en mi base de datos de desarrollo
Entre los pasos 1 y 2, necesito borrar la base de datos de desarrollo (¿soltar todas las tablas?). ¿Cómo se logra esto mejor a partir de 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
He usado:
pg_restore -c -d database_name filename.dump
Para volcar:
pg_dump -Fc mydb > db.dump
Para restaurar:
pg_restore --verbose --clean --no-acl --no-owner -h localhost -U myuser -d my_db db/latest.dump
Si 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 sin formato, puede conectar pg_dump
y pg_restore
directamente a través de un conducto.
Para descartar y volver a crear tablas, puede usar la opción de línea de comando --clean
para pg_dump
para emitir comandos SQL para limpiar (soltar) objetos de 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í:
pg_dump -U username --clean | pg_restore -U username
Simplemente soltaría la base de datos y luego la volvería a crear. En un sistema UNIX o Linux, eso debería hacerlo:
$ dropdb development_db_name
$ createdb developmnent_db_name
Así es como lo hago, en realidad.