Я пишу, сценарий оболочки (станет cronjob), который будет:
1: выведите мою производственную базу данных
2: импортируйте дамп в мою базу данных разработки
Между шагом 1 и 2 я должен очиститься, база данных разработки (отбросьте все таблицы?). Как это лучше всего выполняется из сценария оболочки? До сих пор это похоже на это:
#!/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
Я просто отбросил базу данных, а затем повторно создаю ее. На системе Unix или Linux это должно сделать это:
$ dropdb development_db_name
$ createdb developmnent_db_name
Вот как я это делаю, на самом деле.
Несмотря на то, что следующая строка берется из сценария партии Windows, команда должна быть вполне похожей:
psql -U username -h localhost -d postgres -c "DROP DATABASE \"$DATABASE\";"
Эта команда используется для очистки всей базы данных, фактически бросая ее. База данных $
(в Windows должна быть база данных %%
) в команде - это переменная среды стиль Windows, которая оценивает имя базы данных. Вам нужно будет заменить, что на ваш develope_db_name
.
Если вам на самом деле не нужна резервная копия базы данных, записанная на диск в формате простого текстового файла скрипта .sql, вы можете соединить pg_dump
и pg_restore
прямо через трубу.
Для сброса и воссоздания таблиц можно использовать опцию командной строки --clean
для pg_dump
, чтобы посылать SQL-команды для очистки (сброса) объектов БД перед их созданием (команды для). (Это не пропустит всю БД, а только каждую таблицу/последовательность/индекс/ и т.д. перед их воссозданием)
Вышеуказанные две команды будут выглядеть примерно так:
pg_dump -U username --clean | pg_restore -U username