Ошибка соединения с БД Postgresql PyCharm
Не могу подключиться к БД, хотя я уверен на 100% что все данные правильные, я скачал проект с git на другой пк, и всё работает и подключается, но у меня на ноутбуке возникает такая ошибка:
Windows 10, Home, PyCharm Pro 2021.1.1
docker-compose.yml
version: '3'
services:
backend:
build: ./
container_name: diploma_container
restart: always
command: ./commands/start_server_${MODE}.sh
ports:
- "${PORT}:${WSGI_PORT}"
volumes:
- .\src:/srv/project/src
- .\commands:/srv/project/commands
- .\src\media:/srv/project/media
- static_content:/var/www/diploma
env_file:
- .env
environment:
- DJANGO_SETTINGS_MODULE=app.settings.${MODE}
depends_on:
- postgres
- rabbitmq
- redis
postgres:
image: postgres:12
# environment:
# - POSTGRES_PASSWORD=mysecretpassword
volumes:
- pg_data:/var/lib/postgresql/data
ports:
- "5432:5432"
env_file:
- .env
nginx:
image: nginx:1.19
volumes:
- .\nginx:/etc/nginx/conf.d
- static_content:/var/www/diploma
ports:
- 80:80
- 443:443
env_file:
- .env
depends_on:
- backend
rabbitmq:
image: rabbitmq:3.8-management-alpine
# ports:
# - 8181:15672
env_file: .env
restart: always
redis:
image: redis
env_file: .env
restart: always
redis-commander:
container_name: redis-commander
hostname: redis-commander
image: rediscommander/redis-commander:latest
restart: always
environment:
- REDIS_HOSTS=redis
ports:
- "8081:8081"
celery:
env_file: .env
build: .
command: ./commands/start_celery.sh
restart: always
depends_on:
- redis
- rabbitmq
environment:
- DJANGO_SETTINGS_MODULE=app.settings.${MODE}
volumes:
- ./src:/srv/project/src
- ./commands:/srv/project/commands
celerybeat:
env_file: .env
build: .
container_name: celerybeat
command: ./commands/start_celerybeat.sh
restart: always
depends_on:
- redis
- celery
- rabbitmq
environment:
- DJANGO_SETTINGS_MODULE=app.settings.${MODE}
volumes:
- ./src:/srv/project/src
- ./commands:/srv/project/commands
volumes:
pg_data: {}
static_content: {}
Создание БД и пользователя:
CREATE USER admin WITH PASSWORD 'password';
ALTER ROLE admin SET client_encoding TO 'utf8';
ALTER ROLE admin SET default_transaction_isolation TO 'read committed';
ALTER ROLE admin SET timezone TO 'UTC';
CREATE DATABASE test;
GRANT ALL PRIVILEGES ON DATABASE test TO admin;
ALTER USER admin CREATEDB;
Ответы (1 шт):
Не наблюдаю у Вас в docker-compose задания пользователя. Для этого надо задать POSTGRES_USER. Либо явно либо в ваше окружение, в данном случае должен быть указан в файле .env. По умолчанию пользователь postgres от него Вы и будете подключаться, в случае если не заданы пользователи.
Если Вы все таки задали пользователя и уверены в правильности, то советую проделать следующее:
- Зайти внутрь контейнера
docker exec -it <имя контейнера postgres> bash - подключиться к БД
psql -U postgres - Посмотреть пользователей.
\du
Дальше в зависимости от результата, если вашего юзера нет, значит Вы его не правильно задали/что то еще, если есть то проверяйте пароль/pg_hba файл на предмет доступа/ и тд.
UPDATE
На втором скрине видно что project encoding = windows-1251 при этом глобальная - UTF-8 так понимаю linux на текущей машине, если другой компьютер с виндой "проект с git на другой пк, и всё работает и подключается", то ответ очевиден). Либо перед созданием поменять кодировку проекта, либо заранее задать переменную PGCLIENTENCODING=UTF8 для windows само собой другую - это изменит стандартную кодировку системы.
По поводу
ALTER ROLE admin SET client_encoding TO 'utf8';
Если Вы подключаетесь после этого из терминала для проверки, то этот прием не поможет. Из документации.
Если и стандартный ввод, и стандартный вывод являются терминалом, то psql установит кодировку клиента в «auto», и подходящая клиентская кодировка будет определяться из локальных установок (переменная окружения LC_CTYPE в Unix). Если это работает не так, как ожидалось, кодировку клиента можно изменить, установив переменную окружения PGCLIENTENCODING.

