Импорт базы данных postgres в докерский контейнер postgres - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь импортировать существующую базу данных в контейнер докера postgres. Вот как я продолжаю:

запуск Docker --name pg-docker -e POSTGRES_PASSWORD = ***** -d -p 5432: 5432 -v BCS / postgres_data postgres

Затем

docker exec -it pg-docker bash
psql -U postgres
postgres=# CREATE DATABASE myDB;
psql -U postgres myDB < BCS/mydb.sql

, но когда я выполняю команду \dt, у меня появляется эта ошибка Did not find any relations. , зная, что в моей базе данных уже есть таблицы. Так что я делаю не так?

Ответы [ 2 ]

1 голос
/ 24 октября 2019

Если вы уверены, что база данных все установила правильно, если вы все еще не видите таблицы, необходимо проверить две вещи:

  • При подключении вы подключаетесь кправильная база данных? Если вы используете psql в терминале, база данных указывается с помощью переключателя -d.
 psql -h <host> -U <user> -d <dbname>

Вы также можете изменить базу данных после подключения с помощью команды \connect <dbname>.

  • Вы указываете правильную схему? \dt покажет вам таблицы, но вам нужно сначала указать схему, используя set schema:
postgres=# \dt

...
<no tables>
...

postgres=# set schema 'my_schema';
postgres=# \dt

...
<my tables>
...

0 голосов
/ 24 октября 2019

Первым делом лучше использовать подход, упомянутый @ 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

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