【问题标题】:Django psycopg2.errors.InvalidSchemaName: no schema has been selected to create inDjango psycopg2.errors.InvalidSchemaName:没有选择要创建的模式
【发布时间】:2021-12-10 20:19:33
【问题描述】:

我正在尝试使用自定义架构在我的 Django 项目中配置 PostgreSQL。我的设置是:

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',
        },
    }
}

我也希望在架构 my_custom_schema 中创建 django 系统表。当我进行第一次迁移时,我得到了错误。

$ 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

【问题讨论】:

标签: django postgresql psycopg2


【解决方案1】:

我自己解决了这个问题。原因出乎意料,因为该错误信息量不大。我检查了在架构my_custom_schema 中为用户创建表的权限,发现这是不允许的。因此,在我授予权限后,一切正常。

GRANT ALL ON SCHEMA my_custom_schema TO my_user;

【讨论】:

    猜你喜欢
    • 2018-11-21
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多