Скопировать базу данных в postgres - PullRequest
7 голосов
/ 28 июня 2011

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

CREATE DATABASE destniationDb TEMPLATE sourceDb;

Но эта опция не срабатывает, когда существует соединение / сеанс с sourceDb. Поэтому мне нужно усечь эту опцию, так как существует высокая вероятность пользователяделает операцию чтения.Все параметры командной строки, такие как restore_db, backup_db, соответствуют моим требованиям. Поэтому мне для этого нужна некоторая консольная команда / функция / хранилище, т. Е. Мне нужно подключиться к базе данных и вызвать некоторую команду / функцию / хранилище, которая достигает этой цели..

Кто-нибудь из вас может предложить какое-то решение моего требования?

Ответы [ 2 ]

11 голосов
/ 28 июня 2011

Почему бы вам просто не создать дамп существующей базы данных sourceDb с помощью команды

pg_dump sourceDb > destinationDb.sql

И в этом дампе SQL destinationDb.sql измените имя базы данных на новое влиния CREATE DATABASE.После этого вы можете создать эту новую БД на сервере, используя psql, например:

psql destinationDb < destinationDb.sql
0 голосов
/ 28 июня 2011

Вы пытались заблокировать таблицу сначала?

РЕДАКТИРОВАТЬ: Я, возможно, упрощение. Я думал, что если вы заблокируете записи в таблицы, которые вы копируете, операция может сработать. Но кажется, что это не тот случай, когда клонирование всего БД.

Если перейти по ссылке, указанной в комментарии, в базе данных не должно быть активных сессий . Я решаю это путем простого перезапуска службы postgres непосредственно перед операцией. Если сценарий достаточно быстрый, ваша последующая копия должна запуститься до того, как новые сеансы смогут подключиться. Я полагаю, что postgres будет ждать до 90 секунд для завершения сеансов, поэтому это решение не должно быть слишком разрушительным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...