Как удалить и восстановить базу данных postgres с помощью одной команды docker? - PullRequest
0 голосов
/ 30 декабря 2018

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

cat <dump sql file> | docker exec -i <container ID> psql -U <postgres username> <database name>

Мне было интересно, есть ли подобная команда docker терминала linux, которую я могу запустить снаружиконтейнер:

  1. Создать базу данных с именем

  2. Удалить базу данных с именем

Или даже:

Удалите все таблицы, чтобы сделать его полностью пустым в одной команде.

Обратите внимание, что я должен иметь возможность выполнять команду docker извне контейнера через терминал ОС хоста (linux).

Любые предложения будут оценены.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

хранилище Postgres локально для контейнера?Если это так, то удаление контейнера и его повторное создание приведет к сбросу вашей БД.Если ваши данные монтируются из локальной или сетевой папки, то их сброс означает выполнение команд на psql

. У вас есть несколько вариантов:

  • попасть внутрь контейнера с оболочкой

docker exec -it <container-id> /bin/sh

, затем запустите psql и выполните все, что вы хотите, в командной строке psql.

  • запустите psql непосредственно в docker

docker exec -it <container-id> psql -U <username> -d <database-name>

  • локально установил psql и запустил его для доступа к экземпляру postgres в docker

psql -U <username> -h localhost

  • запускать команды с помощью psql

Вы не можете DROP и СОЗДАТЬ базу данных по одной команде, к сожалению, но вы можете запустить 2 отдельные команды

docker exec -it <container-id> psql -U <username> -d postgres -c "DROP DATABASE <dbname>;"

docker exec -it <container-id> psql -U <username> -d postgres -c "CREATE DATABASE <dbname>;"

0 голосов
/ 30 декабря 2018

Если у вашего вопроса cat <dump sql file>, вы можете поместить все, что захотите, для вывода команд SQL на стандартный вывод;это включает echo DROP DATABASE ....

Помните, что вы можете использовать обычный клиент PostgreSQL для взаимодействия с сервером PostgreSQL, независимо от того, работает он в Docker или нет.(Для этого необходимо опубликовать порт базы данных извне, обычно с параметром docker run -p5432:5432 или аналогичным.) Вам не нужен доступ на уровне root на хосте или корневая оболочка на сервере базы данных, просто для запуска команд базы данных.

Эта команда оболочки удалит именованную базу данных на экземпляре PostgreSQL, работающем на текущем хосте;или если он не на текущем хосте или на порте по умолчанию, вы можете установить PGHOST и PGPORT переменные окружения .

export PGHOST=localhost
# export PGUSER=<postgres username>
# export PGDATABASE=<database name>
echo "DROP DATABASE $1" | psql
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...