繁体   English   中英

Heroku上的Django无法使用不同的架构连接到Postgres

[英]Django on Heroku can't connect to Postgres with different schema

我今天致力于将我的应用程序从本地环境迁移到Heroku。 同时令人沮丧和有趣,但是现在我很困。

我有一个名为DCPViews的架构,我希望在运行查询时将数据库连接默认设置DCPViews架构。 我已经阅读了所有相关的教程/帖子/技巧,这就是我的位置:

数据库层次结构

postgres (default system database) 
  -> DCP (app database) 
    -> DCP (base tables schema) 
    -> DCPViews (views layer schema) 

settings.py

import django_heroku
import dj_database_url

...

DATABASES = {}

# DATABASE_URL = 'postgres://<user>:<pass>@<host>:<port>/<db_name>?currentSchema=<schema>'
DATABASE_URL = 'postgres://' + \
                config('DB_USER') + ':' + \
                config('DB_PASSWORD') + '@' + \
                config('DB_HOST') + ':' + \
                config('DB_PORT') + '/' + \
                config('DB_NAME') + \
                '?currentSchema=' + config('DB_SCHEMA_NAME')

DATABASES['default'] = dj_database_url.config(default=DATABASE_URL, ssl_require=True)

...

# Configure Django App for Heroku
django_heroku.settings(locals())

问题

我已经尽一切努力使Heroku使用正确的DATABASE_URL(带有currentSchema = DCPViews ),但是没有运气。 我没有数据库权限来创建新角色,也没有为Heroku的默认数据库用户设置搜索路径。 它还不允许我手动导出DATABASE_URL ,并且似乎不接受我在settings.py文件中传递的值。 heroku config -s命令始终返回相同的DATABASE_URL值。

在我的本地环境中一切正常,但这是一个主要障碍。 运行查询时,如何让Heroku使用正确的search_path或默认使用DCPViews模式?

更新

我正在发送要在我的settings.py文件中使用的数据库凭证和currentSchema ,但是Heroku在创建DATABASES['default']键时似乎忽略了它们并覆盖了它们。 这是在浏览器中加载页面时的Django调试:

DATABASES   
{'default': {'ATOMIC_REQUESTS': False,
             'AUTOCOMMIT': True,
             'CONN_MAX_AGE': 600,
             'ENGINE': 'django.db.backends.postgresql_psycopg2',
             'HOST': '<host_name>',
             'NAME': '<db_name>',
             'OPTIONS': {'sslmode': 'require'},
             'PASSWORD': '********************',
             'PORT': 5432,
             'TEST': {'CHARSET': None,
                      'COLLATION': None,
                      'MIRROR': None,
                      'NAME': None},
             'TIME_ZONE': None,
             'USER': '<user_name>'}}
DATABASE_URL    
'postgres://<user>:<pass>@<host>:<port>/<db_name>?currentSchema=<schema>'

我无法发表评论,但是由于您的设置文件使用的是环境文件,因此您只需转到heroku.com上的heroku应用程序,然后转到与应用程序连接的数据库即可。 然后转到设置,然后单击reveal config vars 将您的DATABASE_URL更改为您需要的任何值(请注意,它可能只是您实际的heroku postgres数据库URL的扩展)

好吧,我走在正确的道路上。 我将search_path添加到ROLE中,并且达到了目的:

ALTER ROLE <role_name> SET search_path = <go, pirates>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM