Вопрос или проблема
У меня есть база данных Postgres, работающая в контейнере Docker на моем компьютере (на базе Ubuntu 20.04 Beta), и мне нужно сделать ее резервную копию.
Я использую DBeaver 7.0.2 для управления базой данных, но когда я пытаюсь использовать инструмент резервного копирования, он просит меня установить клиент. Единственный вариант, который у меня есть, когда я нажимаю на выпадающий список, это обзор, но затем всплывает это окно:
У меня нет идеи, что нужно вставить сюда; я не нашел ничего полезного в документации; и в каждом руководстве, которое я нахожу в интернете, выпадающий список с клиентом имеет другие варианты, что не так в моем случае. Можете ли вы помочь?
Я попробовал выполнить это так же, как и вы, и столкнулся с той же проблемой. К сожалению, я не нашел способа решить вопрос с DBeaver, так что это может не быть тем, что вы ищете, но этот ответ помог мне получить то, что мне нужно: https://stackoverflow.com/a/29913462/9843399. Вот он с небольшими правками:
Создайте резервную копию вашей базы данных
docker exec -t <ваш-db-контейнер> pg_dumpall -c -U postgres > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql
Восстановите вашу базу данных
cat your_dump.sql | docker exec -i <ваш-db-контейнер> psql -U postgres
(Примечание: мне пришлось воссоздать свою схему перед тем, как восстановление прошло успешно. В моей версии это можно сделать в DBeaver, как: нажмите на вашу базу данных > щелкните правой кнопкой на “Schemas” > нажмите “Создать новую схему”)
Ответ или решение
Чтобы создать резервную копию базы данных PostgreSQL, работающей в контейнере Docker, с использованием DBeaver, можно столкнуться с проблемами, связанными с запросом к установке нативного клиента. Рассмотрим, как можно выполнить резервное копирование без этой дополнительной сложности.
Пошаговое руководство по резервному копированию PostgreSQL из контейнера Docker
-
Подготовка окружения: Убедитесь, что у вас установлен Docker и DBeaver, а также что вы можете получить доступ к вашему контейнеру с базой данных.
-
Определите имя вашего контейнера: Для начала вам нужно знать имя или ID вашего контейнера, в котором запущена база данных PostgreSQL. Это можно сделать с помощью команды:
docker ps
-
Создание резервной копии с помощью
pg_dump
: Вместо использования DBeaver, воспользуйтесь командойpg_dump
для создания резервной копии базы данных. Откройте терминал и выполните следующую команду, заменив<your-db-container>
на имя вашего контейнера:docker exec -t <your-db-container> pg_dumpall -c -U postgres > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql
- Тут:
docker exec -t <your-db-container>
позволяет вам выполнить команду внутри контейнера.pg_dumpall
— это утилита для резервного копирования всех баз данных.-c
— опция для очистки существующих объектов в целевой базе данных при восстановлении.-U postgres
указывает на пользователя PostgreSQL, с которым вы выполняете команду.dump_
date +%d-%m-%Y""%H%M_%S.sql
будет именем файла резервной копии, включающим текущее время и дату.
- Тут:
-
Проверка созданной резервной копии: После выполнения команды в указанной директории должен появиться файл с резервной копией базы данных.
Восстановление базы данных
-
Используйте
psql
для восстановления резервной копии: Чтобы восстановить базу данных из резервной копии, используйте следующую команду:cat your_dump.sql | docker exec -i <your-db-container> psql -U postgres
Здесь:
cat your_dump.sql
читает содержимое файла резервной копии и передает его в стандартный ввод.docker exec -i <your-db-container> psql -U postgres
выполняет команду внутри контейнера для восстановления данных в базу.
-
Создание схем перед восстановлением: Если вы получаете ошибки при восстановлении, возможно, вам потребуется предварительно создать необходимые схемы в DBeaver. Для этого:
- Нажмите правой кнопкой мыши на вашу базу данных.
- Перейдите в "Schemas" и выберите "Create New Schema".
Заключение
Хотя DBeaver предоставляет удобный графический интерфейс для управления базами данных, использование командной строки для выполнения резервного копирования и восстановления часто оказывается более гибким и надежным решением. Следуя вышеперечисленным шагам, вы сможете эффективно управлять резервными копиями вашей базы данных PostgreSQL в Docker.