Django psycopg2.errors.InvalidSchemaName: не выбрана схема для создания в

Я пытаюсь настроить PostgreSQL в моем Django проекте с пользовательской схемой. Мои настройки таковы:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': os.environ['DB_DATABASE'],
        'USER': os.environ['DB_USERNAME'],
        'PASSWORD': os.environ['DB_PASSWORD'],
        'HOST': os.environ.get('DB_HOST', 'localhost'),
        'PORT': os.environ.get('DB_PORT', '5432'),
        'OPTIONS': {
            'options': '-c search_path=my_custom_schema',
        },
    }
}

Я хочу, чтобы системные таблицы django также были созданы в схеме my_custom_schema. Когда я делаю первую миграцию, я получаю ошибку.

$ python manage.py migrate
...
psycopg2.errors.InvalidSchemaName: no schema has been selected to create in
LINE 1: CREATE TABLE "django_migrations" ("id" bigserial NOT NULL PR...
...

Как мне ее решить?

Я также пробовал такой вариант:

'OPTIONS': {
    'options': '-c search_path=my_custom_schema,public',
},

Миграция прошла успешно, но таблицы были созданы в схеме public вместо my_custom_schema.

Версия Python: 3.9.7

Версия Django: 3.2.8

Версия Psycopg2: psycopg2-binary==2.9.1

PostgreSQL версия: 12.8

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

GRANT ALL ON SCHEMA my_custom_schema TO my_user;
Вернуться на верх