3

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

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

但是,似乎 Django 并没有真正很好地支持模式。如何使用 manage.py 为特定模式生成模型等?

4

2 回答 2

4

您可以将默认模式分配给数据库用户,或者 - 准确地说 - 将模式搜索路径分配给用户。如果该路径仅包含一个模式,则您有效地为用户设置了默认模式。

然后沿路径查找任何不合格的对象名称(表、视图、函数...)。不合格的 CREATE 语句将在搜索路径的第一个模式中创建对象。

所以你需要做的就是改变 Django 用来连接数据库的用户:

alter user django_user set search_path to the_one_schema;
commit;

之后,例如 acreate table foo将在 schema 中创建表the_one_schema

您需要注销然后再次登录以使更改“活动”。

于 2012-10-15T22:05:35.943 回答
2

以下是最终奏效的方法:

我编写了一个新的 manage.py 命令,它是我想要识别模式的命令(syncdb、migrate、changepassword)的包装器,并通过以下方式手动选择模式:

from django.db import connection
cursor = connection.cursor()
cursor.execute('SET search_path TO ' + my_little_schema)
于 2012-11-05T21:31:12.447 回答