将manage.py指向特定的PostegreSQL架构

时间:2012-10-15 21:42:28

标签: django postgresql psycopg2 django-postgresql

如何告诉manage.py在特定的PostgreSQL架构中运行?

我的数据库被分成多个模式,每个客户端/部署一个,以保持数据分离。

但是,似乎Django并不能真正支持模式。如何使用manage.py?

为特定架构生成模型等

2 个答案:

答案 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)