Я пишу сценарий оболочки (станет 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
database
backup
postgresql
Hoff
источник
источник
dbname='db_name' && dropdb $dbname && createdb $dbname && psql -d $dbname -f dump.sql
Ответы:
Я бы просто отбросил базу данных, а затем заново создал ее. В системе UNIX или Linux это должно быть сделано:
Вот как я это делаю, на самом деле.
источник
createdb --owner=db_owner [--template=template0 --encoding=UTF8] db_name
Я добавляю последние два по умолчанию для всех баз данныхЕсли вам на самом деле не нужна резервная копия базы данных, выгруженной на диск в формате простого текстового файла .sql, вы можете подключиться
pg_dump
иpg_restore
напрямую через канал.Чтобы удалить и воссоздать таблицы, вы можете использовать параметр
--clean
командной строки дляpg_dump
чтобы выдавать команды SQL для очистки (отбрасывания) объектов базы данных перед (командами) их создания. (Это не приведет к удалению всей базы данных, только каждой таблицы / последовательности / индекса / и т. Д. Перед их воссозданием.)Вышеуказанные два будут выглядеть примерно так:
источник
Хотя следующая строка взята из пакетного скрипта Windows, команда должна быть очень похожей:
Эта команда используется для очистки всей базы данных путем ее удаления.
$DATABASE
(В Windows , должно быть%DATABASE%
) в команде является переменной окружения окна стиль , который имеет значение имени базы данных. Вам нужно будет заменить это своимdevelopment_db_name
.источник
dropdb
иcreatedb
команды? Если вы можете запустить psql, вы можете запустить и их.Сбросить:
Восстановить:
источник
Если вы хотите очистить вашу базу данных с именем "example_db":
1) Войдите в другую базу данных (например, 'postgres'):
2) Удалить вашу базу данных:
3) воссоздать вашу базу данных:
источник
Я использовал:
источник
Примечание: мой ответ - действительно удалить таблицы и другие объекты базы данных; для удаления всех данных в таблицах, т. е. усечения всех таблиц , Endre Both предоставил аналогично хорошо выполненный (прямое выполнение) оператор месяц спустя.
Для тех случаев , когда вы можете не только
DROP SCHEMA public CASCADE;
,DROP OWNED BY current_user;
или что - то, вот автономный SQL скрипт я написал, что сделка безопасным (т.е. вы можете поместить его междуBEGIN;
и илиROLLBACK;
к просто проверить это илиCOMMIT;
на самом деле делать дело) и очищает «все» объекты базы данных… ну, все те, которые используются в базе данных, которую использует наше приложение, или я мог бы разумно добавить, что:CHECK
,UNIQUE
)VIEW
s (нормальный или материализованный)public
внутренние или DB-внутренние), которыми владеем «мы»: сценарий полезен, когда выполняется как «не суперпользователь базы данных»; суперпользователь может отбросить все схемы (хотя действительно важные из них явно исключены)Не исключены (некоторые преднамеренные; некоторые только потому, что у меня нет примера в нашей БД):
public
схемы (например , для расширения предоставленного материала в них)Это действительно полезно в тех случаях, когда дамп, который вы хотите восстановить, имеет другую версию схемы базы данных (например, с Debian
dbconfig-common
, Flyway или Liquibase / DB-Manul), чем база данных, в которую вы хотите восстановить ее.У меня также есть версия, которая удаляет «все, кроме двух таблиц и того, что им принадлежит» (последовательность, проверенная вручную, извините, я знаю, скучно), если кто-то заинтересован; разница маленькая. Свяжитесь со мной или проверьте это РЕПО если интересно.
SQL
Протестировано, за исключением более поздних дополнений (
extensions
предоставленных Clément Prévost ), на PostgreSQL 9.6 (jessie-backports
). Удаление агрегатов проверено на 9.6 и 12.2, процедура удаления также проверена на 12.2. Исправления и дальнейшие улучшения приветствуются!источник