Как запустить сценарии оболочки в контейнере postgres, чтобы определить, пуста ли база данных, и импортировать резервный сценарий SQL, если это не так - PullRequest
0 голосов
/ 30 сентября 2019

Я хочу перенести свой проект в vagrant vm, частью этого является перенос данных базы данных в vagrant, я использую контейнер postgres для хранения данных, поэтому я смонтировал каталог в /var/lib.postgresql/, а сценарий резервного копирования SQL в /docker-entrypoint-initdb.d/ для автоматической загрузки резервных данных и их сохранности.

docker run --name test1 -v /postgresShellTest/:/docker-entrypoint-initdb.d/ -v /postData/:/var/lib/postgresql/ postgres:11.4

Однако это приводит к тому, что добавленные данные удаляются резервным SQL при каждом создании контейнера после его удаления. Хотя возможно not mount the backup SQL later, это не очень удобно. Поэтому мне интересно, могу ли я добавить мнение о том, что при наличии таблицы проекта резервный SQL не будет запущен, иначе база данных будет инициализирована.

Я монтирую shell.sh в /docker-entrypoint-initdb.d/, содержимое выглядит следующим образом:

BAK=/var/lib/postgresql/data/
if [ "`ls -A ${BAK}`" = "" ];
then 
    echo "${BAK} is empty"
    psql -h localhost -p 5432 -U postgres -d postgres < edgeai.sql
else
    echo "${BAK} is not empty"
fi

. Впервые смонтирована пустая папка для /var/lib/postgresql/data/, но этот отчет psql: could not connect to server: No such file or directory ....socket "/tmp/.s.PGSQL.5432"?

Поэтому я хочу psql таблицу поиска

psql -U postgres -d postgres -c 'SELECT * FROM mytable'

но сообщается об ошибке psql: FATAL: database "SELECT * FROM my_table" does not exist

Я не знал, как еще достичь своих целей

Я был бы очень признателен, если бы вы, ребята, могли сказать мне, как достичьон

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