【问题标题】:Specify PostgreSQL Schema in Django在 Django 中指定 PostgreSQL 模式
【发布时间】:2017-05-18 01:23:22
【问题描述】:

我正在尝试使用 Django 构建一些数据库前端,因为我喜欢通用的 MVC 结构以及它们的模板系统和管理界面。但是,我在使用 PostgreSQL 后端的某些方面遇到了麻烦。

我已经设法弄清楚如何使用 settings.py 文件的数据库部分指定不同的架构(和数据库),如下所示:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },
    'MPS': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'OPTIONS': {
            'options': '-c search_path=django'
        },
       'NAME': 'sandbox_manzer',
       'HOST': '192.168.2.151',
       'PORT': '5434',
       'USER': '******',
       'PASSWORD': '**********************',
    }
}

但是,当我尝试编写一些基本测试的脚本时,如here 所述,我遇到了问题。我的用户可以很好地创建数据库,以便构建我的 test_db,但是当 django 应用程序将模型构建到表中时,我收到一条错误消息,指出 test_db 的 No schema is specified。对于我如何为 test_db 指定模式名称的任何帮助将不胜感激。特别是因为我打算使用不同的模式作为逻辑分隔符为单个项目构建多个应用程序。

谢谢!

【问题讨论】:

    标签: django postgresql


    【解决方案1】:

    我想你对PostgreSQL的概念很熟悉schemas.

    您的应用正在您的数据库中查找 django 架构(可能不存在),因为您已明确告知它。

           'options': '-c search_path=django'
    

    为每个应用程序创建一个适当命名的架构并在search_path 中指定它。

    【讨论】:

    • 谢谢达里奥。但是,我不确定如何在 test_db 中影响这一点(这是发生此问题的地方)。我想你知道 test_db 是重新创建的,然后在运行 Django 测试时被销毁。我找不到任何关于如何为测试目的指定现有数据库的文档。也许使用MIRROR 显示的here 可能有用。有什么想法吗?
    • 我的第一次尝试是指定search_path=django,public,这样如果django 不存在,则应该在public(始终存在)中创建表;或者,您可以注释掉整个 OPTIONS 部分,但您将失去拥有单独架构的好处。
    • 我试图避免将所有内容加载到公共架构中。我读过一些论文,表明膨胀公共模式会干扰 PostgreSQL 服务器操作并可能导致性能问题。此外,我想将模式用作不同应用程序的逻辑分隔符。我会继续玩这个。
    • Django 1.11:OperationalError: ERROR: unsupported startup parameter: options
    • @Matt - 与 Django 3.2 相同。你找到决定了吗?
    猜你喜欢
    • 2011-10-06
    • 2018-11-22
    • 1970-01-01
    • 2012-10-05
    • 2015-01-16
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    相关资源
    最近更新 更多