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