Первым делом лучше использовать подход, упомянутый @ LinPy.
Или лучше копировать во время сборки.
Dockerfile
FROM postgres
COPY mydb.sql /docker-entrypoint-initdb.d/
Другой вариантВам нужно создать сценарий только для создания БД.
FROM postgres
ENV POSTGRES_DB=mydb
Будет создан БД для вас.
POSTGRES_DB
Thisнеобязательная переменная среды может использоваться для определения другого имени для базы данных по умолчанию, которая создается при первом запуске образа. Если он не указан, будет использовано значение POSTGRES_USER.
В приведенном выше примере точка входа Postgres позаботится о сценарии SQL.
Во-вторых, текущая проблема с именем базы данных , Postgress не будет обрабатывать их в верхнем регистре просто, если вы не сделали трюк .
Postgresql обрабатываетимя БД в нижнем регистре, нормализация. Однако поле в postgresapi не повторяет это поведение, что позволяет создать базу данных с заглавными буквами. Исправление может заключаться в том, чтобы предупредить пользователя о том, что в анониме db нельзя использовать заглавные буквы, и добавить в API правило проверки, чтобы остановить создание такой базы данных пользователем.
postgres-api
Изменить команду для создания БД
docker exec -it pg-docker bash
psql -U postgres
postgres=# CREATE DATABASE myDB;
verfiy DB
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
mydb | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres +
, поэтому команда импорта будет
psql -U postgres mydb < BCS/mydb.sql
или
psql -d mydb -U postgres -f ab.sql