2013-10-07 4 views
6

Я использую Postgres сегодня и получил проблему я дамп базы данных, способКак восстановить базу данных Postgres в другое имя базы данных

pg_dump zeus_development -U test > zeus_development.dump.out 

что, если я wnat для восстановления в другую базу данных zeus_production

Как я могу это сделать?

+1

Боковое примечание. Возможно, лучше использовать один из двоичных дампов вместо обычного текста. Это ускорит процесс дампа/восстановления, уменьшит размер файла дампа и предоставит некоторые дополнительные способы управления процессом восстановления. Подробности ['here'] (http://www.postgresql.org/docs/current/static/app-pgdump.html) –

ответ

14

Простой, сначала создать свою базу данных, используя template0 в качестве template database:

createdb -U test -T template0 zeus_production 

Затем восстановить дамп на этой базе данных:

psql -U test zeus_production -f /path/to/zeus_development.dump.out 

При восстановлении, всегда используйте template0 явно, как это всегда пустая и неизменяемая база данных. Если вы не используете явный шаблон, PostgreSQL будет принимать template1, и если у него есть некоторые объекты, такие как таблица или функция, которые уже имеются в вашей базе данных, вы получите некоторые ошибки при восстановлении.

Тем не менее, даже если вы восстанавливались в базе данных с таким же именем (zeus_development), вы должны создать (или воссоздать) его таким же образом. Если вы не использовали опцию -C во время сброса (или -C из pg_restore, если используете двоичный дамп), что я не рекомендую, потому что это даст вам меньшую гибкость (например, восстановление по другому имени базы данных).

0

Не проще ли просто сделать следующее?

createdb -U test -T zeus_development zeus_production 
+0

Собственно, вышеизложенное работает. В первоначальном вопросе не упоминалось, что он переезжает на новую машину. Это было просто принято. Опция -T - достаточно мощная. – pedz

2

Документация PostgresSQL повлияла на меня, чтобы использовать пользовательский формат. Я использую его в течение многих лет, и это, кажется, имеет различные преимущества, но YMMV. Тем не менее, вот то, что работает для меня:

pg_restore --no-owner --dbname postgres --create ~/Desktop/pg_dump 
psql --dbname postgres -c 'ALTER DATABASE foodog_production RENAME TO foodog_development' 

Там не было ни foodog_development foodog_production базы данных, существовавшие до последовательности.

Это восстанавливает базу данных из дампа (~/Desktop/pg_dump), который создаст его с именем, которое оно было сброшено как. Переименование называет БД тем, что вы хотите.

Возможно, вам не нужен владелец, если ваше имя пользователя одинаково на обеих машинах. В моем случае дамп выполнялся как user1, а восстановление выполнялось как user2. Новые объекты должны принадлежать пользователю2, а -no-owner достигает этого.

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