Как подключиться к СУБД PostgreSQL на PythonAnywhere?

Я загрузил сайт, который представляет собой базовый сайт Django "Hello World" с некоторыми изменениями. Во-первых, БД настроена на использование Postgres. Это прекрасно работает локально, но у меня возникают проблемы с пониманием того, как завершить настройку на PythonAnywhere.

На PA БД была настроена с помощью psql следующим образом:

CREATE DATABASE domain_db;

CREATE USER domain_admin WITH PASSWORD '123456789';

\connect domain_db;

CREATE SCHEMA domain_schema AUTHORIZATION domain_admin;

-- Settings recommended by Django documentation
ALTER ROLE domain_admin SET client_encoding TO 'utf8';
ALTER ROLE domain_admin SET default_transaction_isolation TO 'read committed';
ALTER ROLE domain_admin SET timezone TO 'UTC';

Обратите внимание, что этот подход основан на рекомендациях в связи с изменениями в разрешениях Postgres в версии 15 (которую мы используем локально). Я предполагаю, что это работает и с v12, которую, как я думаю, использует PA. Могу ошибаться в этом вопросе.

<

https://www.cybertec-postgresql.com/en/error-permission-denied-schema-public/

Структура каталога проекта выглядит следующим образом:

domain/
    site/
        _config/
            settings/
                base.py           Settings common to local and production
                local.py          Local development settings
                production.py     Production server settings
            asgi.py
            urls.py
            wsgi.py
        staticfiles/
        manage.py
    venv
    .env

В base.py я настраиваю базу данных, используя переменные окружения, загруженные из файла .env. Я подтвердил, что файл .env загружается и переменные окружения устанавливаются в соответствии с его содержимым.

BASE_DIR = Path(__file__).resolve().parent.parent.parent
...
env = environ.Env()
env_file_path = BASE_DIR.parent / ".env"
env.read_env(env_file_path)
...
DATABASES = {
    'default': {
        "ENGINE": env("ENGINE"),
        "OPTIONS": env.json("OPTIONS", default={}),
        "NAME": env("NAME"),
        "USER": env("USER"),
        "PASSWORD": env("PASSWORD"),
        "HOST": env("HOST"),
        "PORT": env("PORT"),
    }
}

Релевантные части файла .env (данные изменены для этого поста):

ALLOWED_HOSTS=www.<domain>.com,<domain>.com

# Database
ENGINE=django.db.backends.postgresql
OPTIONS={"options": "-c search_path=domain_schema"}
NAME=domain_db
USER=domain_admin
PASSWORD=123456789
HOST=<prefix>.postgres.pythonanywhere-services.com
PORT=<port provided by PA>

Когда я пытаюсь запустить makemigrations, я получаю следующую ошибку (отредактировано):

/django/core/management/commands/makemigrations.py:160: 

RuntimeWarning: Got an error checking a consistent migration history performed for database connection 'default':

connection failed: connection to server at "xx.xx.xx.xx", port <xxxxx> failed:

FATAL:  password authentication failed for user <user> connection to server at "xx.xx.xx.xx.", port <xxxxx> failed:

FATAL:  password authentication failed for user <user>

Я подтвердил соединение, используя:

psql -h <prefix>.postgres.pythonanywhere-services.com -U domain_admin -d domain_db -p <port>

Не совсем понимаю, куда двигаться дальше. Я думаю, что настройки в .env правильные. Есть ли что-то еще, что я должен настроить, чтобы это работало? Или же Postgres v12 нуждается в совершенно иной конфигурации по сравнению с тем, что мы используем локально (v15). Если это так, есть ли способ обновить версию до v15, чтобы привести ее в соответствие с локальной?

Вернуться на верх