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();
Servers
-> (мой сервер) ->Databases
, щелкнуть правой кнопкой мыши Базы данных и выбрать «Новая база данных». Одним из вариантов является шаблон, а SQL, используемый для создания базы данных, эквивалентен. Это так гораздо быстрее , чем свалка / восстановления на том же сервере.Версия ответа Белла для командной строки :
Это должно выполняться под привилегиями хозяина базы данных, обычно postgres.
источник
createdb: database creation failed: ERROR: source database "conf" is being accessed by other users
если попытаетесь сделать это в производственной базе данных, и, как ожидается, вы не захотите выключать ее для создания копии.Чтобы клонировать существующую базу данных с помощью postgres, вы можете сделать это
IT прервет все соединения с исходной БД, избегая ошибки
источник
procpid
сpid
для этой работыВ производственной среде, где исходная база данных находится под трафиком, я просто использую:
источник
pg_dump -s
? postgresql.org/docs/current/static/app-pgdump.html$ createdb newdb
Не знаю насчет pgAdmin, но
pgdump
выдает дамп базы данных в SQL. Вам нужно только создать базу данных с тем же именем и сделатьвосстановить все таблицы и их данные и все права доступа.
источник
pg_dump -U postgres sourcedb | psql -U postgres newdb
хотя эффективность этой техники может быть сомнительной (поскольку вы, вероятно, в конечном итоге переключаетесь между чтением и записью контекста)ssh dbserver pg_dump DBNAME | psql NEWDB
... илиpg_dump DBNAME | ssh otherserver pgsql NEWDB
... Разрешения и аутентификация, конечно, должны быть обработаны, однако вы хотите обрабатывать их.Во-первых,
sudo
как пользователь базы данных:Перейдите в командную строку PostgreSQL:
Создайте новую базу данных, дайте права и выйдите:
Скопируйте структуру и данные из старой базы данных в новую:
источник
\l+
. Почему разница в размерах?Я собрал этот подход вместе с примерами сверху. Я работаю на сервере "под нагрузкой" и получил ошибку, когда попытался подойти от @zbyszek. Я также был после решения "только для командной строки".
createdb: database creation failed: ERROR: source database "exampledb" is being accessed by other users
,Вот что сработало для меня ( Команды с префиксом
nohup
для перемещения вывода в файл и защиты от отключения сервера ):nohup pg_dump exampledb > example-01.sql
createdb -O postgres exampledbclone_01
nohup psql exampledbclone_01 < example-01.sql
источник
В pgAdmin вы можете сделать резервную копию из вашей исходной базы данных, а затем просто создать новую базу данных и восстановить из только что созданной резервной копии:
источник
Как правильно скопировать всю базу данных (ее структуру и данные) в новую в pgAdmin?
Ответ:
Пробовал и проверял.
источник
Из документации использование
createdb
илиCREATE DATABASE
с шаблонами не рекомендуется:pg_dump
илиpg_dumpall
это хороший способ скопировать базу данных и все данные. Если вы используете графический интерфейс, такой как pgAdmin, эти команды вызываются негласно, когда вы выполняете команду резервного копирования. Копирование в новую базу данных выполняется в два этапа: резервное копирование и восстановлениеpg_dumpall
сохраняет все базы данных в кластере PostgreSQL. Недостаток этого подхода заключается в том, что в итоге вы получаете потенциально очень большой текстовый файл, полный SQL, необходимый для создания базы данных и заполнения данных. Преимущество этого подхода заключается в том, что вы получаете все роли (разрешения) для кластера бесплатно. Чтобы сбросить все базы данных, сделайте это из учетной записи суперпользователяи восстановить
pg_dump
имеет некоторые параметры сжатия, которые дают вам файлы меньшего размера. У меня есть производственная база данных, которую я делаю резервное копирование два раза в день с помощью cron, используягде
compress
уровень сжатия (от 0 до 9) иcreate
указываетpg_dump
на добавление команд для создания базы данных. Восстановите (или переместите в новый кластер), используягде newdb - это имя базы данных, которую вы хотите использовать.
Другие вещи, чтобы думать о
PostgreSQL использует ROLES для управления разрешениями. Они не копируются
pg_dump
. Кроме того, мы не имели дело с настройками в postgresql.conf и pg_hba.conf (если вы перемещаете базу данных на другой сервер). Вы должны будете самостоятельно определить настройки conf. Но есть одна уловка, которую я только что обнаружил для резервного копирования ролей. Роли управляются на уровне кластера, и вы можете запроситьpg_dumpall
резервное копирование только ролей с помощью--roles-only
переключателя командной строки.источник
PostgreSQL 9.1.2:
источник
CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;
и в результате требуется, чтобы исходная база данных находилась в режиме ожидания (без соединений с доступом для записи), и любые новые соединения с исходной базой данных не допускаются во время копирования. Если вы довольны этим, это работает.Для тех, кто все еще заинтересован, я разработал скрипт bash, который делает (более или менее) то, что хотел автор. Мне приходилось делать ежедневную бизнес-копию базы данных в производственной системе, этот скрипт, похоже, помогает. Не забудьте изменить имя базы данных / значения пользователя / pw.
источник
Создать дамп базы данных
Чтобы восстановить дамп базы данных
источник
Вот весь процесс создания копии базы данных с использованием только графического интерфейса pgadmin4 (с помощью резервного копирования и восстановления)
Postgres поставляется с Pgadmin4. Если вы используете macOS, вы можете нажать
CMD
+SPACE
и набрать,pgadmin4
чтобы запустить его. Это откроет вкладку браузера в Chrome.Шаги для копирования
1. Создайте резервную копию
Сделайте это, щелкнув правой кнопкой мыши базу данных -> «резервное копирование»
2. Дайте файлу имя.
Как
test12345
. Нажмите кнопку резервного копирования. Это создает дамп двоичного файла, он не в.sql
формате3. Посмотрите, где он скачал
Там должно быть всплывающее окно в нижней части экрана. Нажмите на страницу «подробнее», чтобы увидеть, куда была загружена ваша резервная копия
4. Найдите местоположение загруженного файла
В этом случае это
/users/vincenttang
5. Восстановите резервную копию из pgadmin
Если вы правильно выполнили шаги с 1 по 4, у вас будет восстановленный двоичный файл. Может случиться, что ваш коллега захочет использовать ваш файл восстановления на своей локальной машине. Сказал ли человек пойти в пгадмин и восстановить
Сделайте это, щелкнув правой кнопкой мыши базу данных -> «восстановить»
6. Выберите поиск файлов
Убедитесь, что вы выбрали местоположение файла вручную, НЕ перетаскивайте файл в поля загрузки в pgadmin. Потому что вы столкнетесь с ошибками разрешений. Вместо этого найдите файл, который вы только что создали:
7. Найти указанный файл
Возможно, вам придется изменить фильтр внизу на «Все файлы». Затем найдите файл, начиная с шага 4. Теперь нажмите правую нижнюю кнопку «Выбрать», чтобы подтвердить
8. Восстановить указанный файл
Вы снова увидите эту страницу с выбранным местоположением файла. Идите вперед и восстановите его
9. Успех
Если все хорошо, в правом нижнем углу должен появиться индикатор, показывающий успешное восстановление. Вы можете перейти к своим таблицам, чтобы увидеть, были ли данные восстановлены надлежащим образом в каждой таблице.
10. Если это не удалось:
В случае сбоя шага 9 попробуйте удалить старую общедоступную схему в вашей базе данных. Перейти к «Инструменту запроса»
Выполните этот блок кода:
Теперь повторите шаги с 5 по 9, это должно сработать
РЕДАКТИРОВАТЬ - Некоторые дополнительные заметки. Обновите PGADMIN4, если во время загрузки вы получили ошибку, указав что-то вроде «архиватор header 1.14 неподдерживаемая версия» во время восстановления
источник
Если база данных имеет открытые соединения, этот скрипт может помочь. Я использую это для создания тестовой базы данных из резервной копии рабочей базы данных каждую ночь. Это предполагает, что у вас есть файл резервной копии .SQL из производственной базы данных (я делаю это в webmin).
источник
Используя pgAdmin, отключите базу данных, которую вы хотите использовать в качестве шаблона. Затем вы выбираете его в качестве шаблона для создания новой базы данных, это позволяет избежать появления ошибки уже используется.
источник
Если вы хотите скопировать всю схему, вы можете создать pg_dump с помощью следующей команды:
pg_dump -h database.host.com -d database_name -n schema_name -U database_user --password
И когда вы хотите импортировать этот дамп, вы можете использовать:
psql "host=database.host.com user=database_user password=database_password dbname=database_name options=--search_path=schema_name" -f sql_dump_to_import.sql
Больше информации о строках соединения: https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING.
Или просто объединить его в один лайнер:
источник
Отключите «шаблонную» базу данных, которую вы хотите использовать в качестве шаблона.
Запустите 2 запроса, как показано ниже
(Приведенный выше оператор SQL завершит все активные сеансы с TemplateDB, а затем вы можете выбрать его в качестве шаблона для создания новой базы данных TargetDB, это позволит избежать появления ошибки, уже используемой.)
источник
Попробуй это:
гл XD
источник