psql: ошибка: не удалось подключиться к серверу: ФАТАЛЬНО: роль «postgres» не существует

#postgresql #docker

#postgresql #docker

Вопрос:

Я «настроил» приложение Django / PostgreSQL и пытаюсь подключиться к своей базе данных. У меня есть 2 контейнера: web и db. Это работает, но я не могу подключиться к своей базе данных postgresql

Раньше я запускал docker exec -it coverage_africa_db_1 psql -U postgres , но получил сообщение об ошибке

psql: ошибка: не удалось подключиться к серверу: ФАТАЛЬНО: роль «postgres» не существует

Я пытаюсь «перейти» в свой контейнер, выполнив команду docker exec -it aab213f730cd bash , и пытаюсь подключиться с помощью команды psql…

psql -d db_dev

psql: ошибка: не удалось подключиться к серверу: ФАТАЛЬНО: роль «root» не существует

или

psql -U postgres

ошибка: не удалось подключиться к серверу: ФАТАЛЬНО: роль «postgres» не существует

на самом деле, ни одна из опций psql не работает…

.env.dev

 SECRET_KEY=*************************************
DEBUG=1
DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1]
SQL_ENGINE=django.db.backends.postgresql
SQL_DATABASE=db_dev
SQL_USER=user
SQL_PASSWORD=user
SQL_HOST=db
SQL_PORT=5432
DATABASE=postgres
DJANGO_SETTINGS_MODULE=core.settings.dev
  

docker-compose.yml

 version: '3.7'

services:
    web:
        build: ./app
        restart: always
        command: python manage.py runserver 0.0.0.0:8000
        volumes:
            - ./app/:/usr/src/app
        ports:
            - 8000:8000
        env_file:
            - ./.env.dev
        depends_on: 
            - db
    db:
        image: postgres:12.0-alpine
        restart: always
        volumes:
            - postgres_data:/var/lib/postgres/data/
        environment:
            - POSTGRES_USER=user
            - POSTGRES_PASSWORD=user
            - POSTGRES_DB=db_dev
volumes:
    postgres_data:
  

Ответ №1:

С контейнером postgres это:

 environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=user
- POSTGRES_DB=db_dev
  

определяет способ инициализации базы данных. Если вы ее не меняли, вы должны иметь возможность подключиться как пользователь «user» с паролем «user».

Если вы ее изменили, то фактические значения — это те, которые присутствовали при первом запуске. После первого запуска эти учетные данные записываются в базу данных, данные которой находятся на postgres_data томе. Если вы хотите удалить данные и повторно инициализировать базу данных с новыми учетными данными, используйте docker-compose down -v .

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

1. спасибо за ответ. Я не менял ее и не пытался docker exec -it coverage_africa_db_1 psql -U user и получил сообщение об ошибке psql: error: could not connect to server: FATAL: database "user" does not exist

2. не понимаю, почему в одном случае это роль не существует, а в другом случае база данных не существует

3. Я уже делаю docker-compose down (без -v), но ничего не изменил…

4. Вы назвали свою базу данных ‘db_dev’ с POSTGRES_DB=db_dev помощью . Попробуйте docker exec -it coverage_africa_db_1 psql -d db_dev -U user .

5. Пожалуйста. Проверьте эту страницу, если хотите узнать больше об этих переменных hub.docker.com/_/postgres .