Пост-ГРЭС: очистите всю базу данных прежде, чем воссоздать / повторно заполняющий из сценария удара

Я пишу, сценарий оболочки (станет 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
116
задан ROMANIA_engineer 24 August 2017 в 07:36
поделиться

3 ответа

Я просто отбросил базу данных, а затем повторно создаю ее. На системе Unix или Linux это должно сделать это:

$ dropdb development_db_name
$ createdb developmnent_db_name

Вот как я это делаю, на самом деле.

165
ответ дан 24 November 2019 в 02:14
поделиться

Несмотря на то, что следующая строка берется из сценария партии Windows, команда должна быть вполне похожей:

psql -U username -h localhost -d postgres -c "DROP DATABASE \"$DATABASE\";"

Эта команда используется для очистки всей базы данных, фактически бросая ее. База данных $ (в Windows должна быть база данных %% ) в команде - это переменная среды стиль Windows, которая оценивает имя базы данных. Вам нужно будет заменить, что на ваш develope_db_name .

13
ответ дан 24 November 2019 в 02:14
поделиться

Если вам на самом деле не нужна резервная копия базы данных, записанная на диск в формате простого текстового файла скрипта .sql, вы можете соединить pg_dump и pg_restore прямо через трубу.

Для сброса и воссоздания таблиц можно использовать опцию командной строки --clean для pg_dump, чтобы посылать SQL-команды для очистки (сброса) объектов БД перед их созданием (команды для). (Это не пропустит всю БД, а только каждую таблицу/последовательность/индекс/ и т.д. перед их воссозданием)

Вышеуказанные две команды будут выглядеть примерно так:

pg_dump -U username --clean | pg_restore -U username
84
ответ дан 24 November 2019 в 02:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: