Создание копии базы данных в PostgreSQL - PullRequest
658 голосов
/ 18 мая 2009

Как правильно скопировать всю базу данных (ее структуру и данные) в новую в pgAdmin?

Ответы [ 18 ]

1019 голосов
/ 18 мая 2009

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

CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;

Тем не менее, вы можете получить:

ERROR:  source database "originaldb" is being accessed by other users

Чтобы исправить это, вы можете использовать этот запрос

SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity 
WHERE pg_stat_activity.datname = 'originaldb' AND pid <> pg_backend_pid();
282 голосов
/ 19 июля 2011

Версия командной строки Ответ Белла :

createdb -O ownername -T originaldb newdb

Это должно выполняться под привилегиями хозяина базы данных, обычно postgres.

103 голосов
/ 12 мая 2014

Чтобы клонировать существующую базу данных с помощью postgres, вы можете сделать это

/* KILL ALL EXISTING CONNECTION FROM ORIGINAL DB (sourcedb)*/
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity 
WHERE pg_stat_activity.datname = 'SOURCE_DB' AND pid <> pg_backend_pid();

/* CLONE DATABASE TO NEW ONE(TARGET_DB) */
CREATE DATABASE TARGET_DB WITH TEMPLATE SOURCE_DB OWNER USER_DB;

ИТ прервет все соединение с исходной БД, избегая ошибки

ERROR:  source database "SOURCE_DB" is being accessed by other users
66 голосов
/ 13 ноября 2014

В производственной среде, где исходная база данных находится под трафиком, я просто использую:

pg_dump production-db | psql test-db
47 голосов
/ 18 мая 2009

Не знаю о pgAdmin, но pgdump дает вам дамп базы данных в SQL. Вам нужно только создать базу данных с тем же именем и сделать

psql mydatabase < my dump

для восстановления всех таблиц и их данных, а также всех прав доступа.

19 голосов
/ 23 марта 2015

Сначала sudo как пользователь базы данных:

sudo su postgres

Перейти к командной строке PostgreSQL:

psql

Создать новую базу данных, дать права и выйти:

CREATE DATABASE new_database_name;
GRANT ALL PRIVILEGES ON DATABASE new_database_name TO my_user;
\d

Копировать структуру и данные из старой базы данных в новую:

pg_dump old_database_name | psql new_database_name
16 голосов
/ 12 июня 2014

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

createdb: database creation failed: ERROR: source database "exampledb" is being accessed by other users.

Вот что у меня сработало ( Команды с добавлением nohup для перемещения вывода в файл и защиты от отключения сервера ):

  1. nohup pg_dump exampledb > example-01.sql
  2. createdb -O postgres exampledbclone_01

    мой пользователь "postgres"

  3. nohup psql exampledbclone_01 < example-01.sql
12 голосов
/ 14 августа 2010

В pgAdmin вы можете создать резервную копию из исходной базы данных, а затем просто создать новую базу данных и восстановить ее из только что созданной резервной копии:

  1. Щелкните правой кнопкой мыши исходную базу данных, резервную копию ... и дамп в файл.
  2. Щелкните правой кнопкой мыши, Новый объект, Новая база данных ... и назовите пункт назначения.
  3. Щелкните правой кнопкой мыши новую базу данных, Восстановите ... и выберите свой файл.
10 голосов
/ 11 января 2012

Как правильно скопировать всю базу данных (ее структуру и данные) в новую в pgAdmin?

Ответ:

CREATE DATABASE newdb WITH TEMPLATE originaldb;

Испытано и проверено.

7 голосов
/ 25 мая 2012

PostgreSQL 9.1.2:

$ CREATEDB new_db_name -T orig_db_name -O db_user;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...