2016-03-09 3 views
0

Я пытаюськак восстановить базу данных postgresql в том же состоянии?

  1. создать моментальный снимок базы данных PostgreSQL (с использованием pg_dump)
  2. сделать некоторые случайные тесты и
  3. восстановить точно такое же состояние, что и снимок, и сделать некоторые другие случайные тесты.

Это может произойти в течение многих/разных дней. Также я в многопользовательской среде, где я не администратор базы данных. В частности, я не могу создать новую БД.

Однако, когда я восстановить БД с помощью

gunzip -c dump_file.gz | psql my_db 

изменения в шаге 2 выше, остаются.

Например, если я сделаю копию таблицы:

create table foo1 as (select * from foo); 

, а затем восстановить, скопированный таблицу foo1 остается там.

Может ли кто-нибудь объяснить, как я могу восстановить то же состояние, как если бы шаг 2 никогда не был таким?

- Обновление -

После комментариев @a_horse_with_no_name, я пытался использовать

DROP OWNED BY my_db_user 

бросить все мои объекты, прежде чем восстановить, но я получил сообщение об ошибке, связанной с расширением, которое я не может контролировать, а мои таблицы остаются нетронутыми.

ERROR: cannot drop sequence bg_gid_seq because extension postgis_tiger_geocoder requires it 
HINT: You can drop extension postgis_tiger_geocoder instead. 

Любые предложения?

+0

Вы можете запустить 'drop schema ...' или даже 'drop owned by ...' перед восстановлением дампа –

+0

@a_horse_with_no_name Спасибо. Есть ли способ сделать это в командной строке? Мне нужно это в среде сценариев. Я могу оставить все, что у меня есть, но некоторые структуры в моем db создаются администратором. – tinlyx

+0

Несомненно, просто запустите сценарий drop, используя 'psql' –

ответ

0

Вы должны удалить все, что есть, отбрасывая и воссоздавая базу данных или что-то в этом роде. pg_dump в основном просто создает SQL-скрипт, который при применении обеспечивает все таблицы, хранимые процедуры и т. д. и которые имеют свои данные. Он ничего не удаляет.

Смежные вопросы