如何告诉manage.py在特定的PostgreSQL架构中运行?
我的数据库被分成多个模式,每个客户端/部署一个,以保持数据分离。
但是,似乎Django并不能真正支持模式。如何使用manage.py?
为特定架构生成模型等答案 0 :(得分:4)
您可以为数据库用户分配默认架构,或者 - 确切地说 - 为用户分配架构搜索路径。如果该路径仅包含单个架构,则可以有效地为用户设置默认架构。
然后沿路径查找任何不合格的对象名称(表,视图,函数,...)。不合格的CREATE语句将在搜索路径的第一个模式中创建对象。
所以你需要做的就是改变Djange用来连接数据库的用户:
alter user django_user set search_path to the_one_schema;
commit;
之后,例如create table foo
将在架构the_one_schema
中创建表。
您需要注销然后再次登录才能使更改“有效”。
答案 1 :(得分:2)
这是最终有效的方法:
我写了一个新的manage.py命令,它是我想要模式化的命令(syncdb,migrate,changepassword)的包装器,并通过以下方式手动选择模式:
from django.db import connection
cursor = connection.cursor()
cursor.execute('SET search_path TO ' + my_little_schema)