Я использую официальный образ postgres v12 docker, который хочу инициализировать двумя SQL файлами дампа, собранными с удаленного устаревшего сервера v9.2 postgres на этапе сборки docker:
RUN ssh $REMOTE_USER@$REMOTE_HOST "pg_dumpall -w -U $REMOTE_DB_USER -h localhost -p $REMOTE_DB_PORT --clean --globals-only -l $REMOTE_DB_NAME" >> dump/a_globals.sql
RUN ssh $REMOTE_USER@$REMOTE_HOST "pg_dump -w -U $REMOTE_DB_USER -h localhost -p $REMOTE_DB_PORT --clean --create $REMOTE_DB_NAME" >> dump/b_db.sql
Поместив оба файла a_globals.sql
и b_db.sql
в папку docker изображений docker-entrypoint-initdb.d
, база данных инициализируется устаревшими файлами SQL при запуске контейнера v12 (как описано здесь ). Docker работает правильно, файлы дампа извлекаются успешно. Однако у меня возникают проблемы с инициализацией базы данных контейнера, и мне нужны указания:
- Когда контейнер начинает инициализировать свою БД, он останавливается на
ERROR: role $someDBRole does not exist
. Это потому, что psql v9.2 дамп SQL файлы DROP
ролей перед их восстановлением; контейнерной БД это не нравится. К сожалению, только в psql v9.4 pg_dumpall
и pg_dump
имеют возможность использовать --if-exists
(см. Документацию pg_dumpall v9.2 ). Что бы вы посоветовали мне сделать, чтобы исправить это? Я мог бы вручную отредактировать файлы дампа SQL, но это было бы непрактично, так как моментальные снимки устаревшей БД необходимо автоматизировать. Есть ли способ подавить эту ошибку во время запуска контейнера? - Если я хочу преобразовать из ASCII в UTF-8, достаточно ли просто установить параметр кодировки для
pg_dumpall
и pg_dump
? Или мне нужно учитывать другие проблемы при обновлении? - Есть ли способ запретить удаление и добавление суперпользователя postgres, который находится в дампе SQL?
- В общем, есть ли другие проблемы при контейнеризации и / или обновлении postgres БД.