У меня есть приложение, которое для локальной разработки имеет несколько контейнеров Docker (организованных в Docker Compose).Одним из таких контейнеров является экземпляр Postgres 10, основанный на официальном образе postgres:10
.Этот экземпляр имеет свой каталог данных, смонтированный как том Docker, который сохраняет данные во время выполнения контейнера.Пока все в порядке.
В рамках тестирования создания и инициализации кластера postgres часто бывает необходимо удалить том Docker, содержащий данные.(Официальный образ postgres запускает кластер init, если-и-только-если каталог данных оказывается пустым при запуске контейнера.) Это тоже хорошо.
Однако!Теперь у меня есть ситуация, когда для тестирования и использования стороннего расширения Postgres мне нужно загрузить около 6 ГБ (полностью статических) данных поиска геокодирования в базу данных на кластере из файлов резервных копий Postgres.Конечно, возможно загрузить данные из локальной точки монтирования при запуске контейнера, и полученные (очень большие) таблицы сохранятся при перезапуске контейнера в томе, который содержит весь кластер.
К сожалению, они не будутпережить удаление тома док-станции, что, опять же, должно происходить с некоторой частотой. Я ищу способ ускорить или избежать восстановления единой базы данных, содержащей данные геокодирования.
Подходы, которые я рассматривал или рассматриваю в настоящее время:
- Использование отдельного тома Docker в том же контейнере для создания постоянного хранилища для отдельного табличного пространства Postgres, которое содержит только базу данных геокодера.Это кажется неработоспособным, потому что, хотя я определенно могу настроить его, официальные документы PG говорят, что табличные пространства и кластеры неразрывно связаны, так что потеря остальной части кластера сделает дополнительное табличное пространство непригодным для использования.Мне бы очень хотелось ошибиться в этом, так как это кажется самым простым решением.
- Создание полностью отдельного контейнера с Postgres, который монтирует том для хранения отдельного кластера, содержащего только данные геокодирования.Предположительно, тогда мне нужно было бы сделать что-то нехорошее с сторонними обертками данных (или еще несколько загадочных хитростей администратора postgres, о которых я пока не знаю), чтобы сделать данные легко доступными из кода приложения.
Итак, мой вопрос: Кто-нибудь знает способ сохранения единой базы данных из докеризованного кластера Postgres, не прибегая к стратегии дампирования и перезагрузки?