Проблема с подключением к моему экземпляру базы данных postgres

#postgresql #docker #docker-compose

#postgresql #docker #docker-compose

Вопрос:

Я пытаюсь подключиться к своей базе данных postgres через Docker. Я подтвердил, что он запущен (порт 5432) вместе с моим инструментом управления базами данных под названием Adminer (порт 8080). Пока все хорошо!

Затем я пытаюсь выполнить миграцию базы данных. (Вот файл Makefile), выполнив следующую команду:

К вашему СВЕДЕНИЮ, migrate — это инструмент миграции базы данных для Golang

 migrate -source file://migrations -database postgres://postgres:secret@localhost:5432/syndicate?sslmode=disable up
 

URL-адрес моей базы данных проверяется:
dbdriver://username:password@host:port/dbname?param1=trueamp;param2=false

Но получаю эту ошибку:

error: pq: role "postgres" does not exist

Вот что я знаю:

  • Имя базы syndicate данных (database.env)
  • Пользователь базы данных по умолчанию postgres (database.env)
  • Пароль secret (database.env)

Зачем пользователю postgres по умолчанию требуется роль?

Я создал эту проблему и рассказываю о ней по мере получения отзывов от различных платформ. Вот мой полный репозиторий

И последнее…

Единственное, что я смог найти, что было похоже на мою проблему, — это документация PostgreSQL 1.3. Создание базы данных с указанием:

Другой ответ может быть таким:

createdb: could not connect to database postgres: FATAL: role "joe" does not exist

где упоминается ваше собственное имя пользователя. Это произойдет, если администратор не создал для вас учетную запись пользователя PostgreSQL. (Учетные записи пользователей PostgreSQL отличаются от учетных записей пользователей операционной системы.) Если вы являетесь администратором, обратитесь к Главе 18 за помощью в создании учетных записей. Вам нужно будет стать пользователем операционной системы, под которой был установлен PostgreSQL (обычно postgres), чтобы создать первую учетную запись пользователя

Это все, спасибо!

Редактировать: как и предлагалось, я добавил POSTGRE_USER в database.env:

 POSTGRES_PASSWORD=secret
POSTGRES_DB=syndicate
POSTGRES_USER=user
 

database.env упоминается в docker-compose.yml:

 version: '3.1'
services:
  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080
  db:
    image: "postgres"
    env_file:
      - database.env # configure postgres
    ports:
      - 5432:5432
 

Теперь получаю ошибку:
error: pq: role "user" does not exist

Комментарии:

1. «go» и «golang-migrate» — это нерелевантные теги.

2. Я снял бирки, спасибо

3. Можете ли вы подключиться к psql? Попробуйте psql -h localhost -U user -d syndicate

4. Получено то же сообщение об ошибке, как будто база данных не существует. Я могу подтвердить, что у меня запущен локальный образ

5. Пожалуйста, вставьте вывод следующего: a) docker-compose ps b) docker ps c) ps -ef | grep postgres d) docker inspect <container id>

Ответ №1:

В PostgreSQL пользователь — это тип роли. Если роль «postgres» не существует, это означает, что у вас нет пользователя «postgres» в БД.

Загляните в настройки контейнера Docker. Официальные сборки требуют, чтобы вы указали имя пользователя по умолчанию. Проверьте, какой пользователь указал его по умолчанию.

Комментарии:

1. «Эта необязательная переменная среды используется совместно с POSTGRES_PASSWORD для установки пользователя и его пароля. Эта переменная создаст указанного пользователя с правами суперпользователя и базу данных с тем же именем. Если это не указано, то будет использоваться пользователь postgres по умолчанию «. — hub.docker.com/_/postgres

2. Я смотрю на правильную документацию?

3. @ConnorCantrell да, это так

4. Да, я попытался определить пользователя. У меня продолжала возникать та же ошибка

5. @ConnorCantrell какого пользователя вы определили? Пожалуйста, приложите содержимое docker-compose.yml в вашем вопросе.