【发布时间】:2012-10-05 22:46:50
【问题描述】:
如何让 manage.py 在特定的 PostgreSQL 架构中运行?
我的数据库被分成多个模式,每个客户端/部署一个,以保持数据分离。
然而,Django 似乎并不能很好地支持模式。如何使用 manage.py 为特定模式生成模型等?
【问题讨论】:
标签: django postgresql psycopg2 django-postgresql
如何让 manage.py 在特定的 PostgreSQL 架构中运行?
我的数据库被分成多个模式,每个客户端/部署一个,以保持数据分离。
然而,Django 似乎并不能很好地支持模式。如何使用 manage.py 为特定模式生成模型等?
【问题讨论】:
标签: django postgresql psycopg2 django-postgresql
这就是最终奏效的方法:
我编写了一个新的 manage.py 命令,它封装了我想要识别模式的命令(syncdb、migrate、changepassword),并通过以下方式手动选择模式:
from django.db import connection
cursor = connection.cursor()
cursor.execute('SET search_path TO ' + my_little_schema)
【讨论】:
您可以将默认架构分配给数据库用户,或者 - 准确地说 - 您可以将架构搜索 path 分配给用户。如果该路径仅包含单个架构,则您有效地为用户设置了默认架构。
然后沿路径查找任何不合格的对象名称(表、视图、函数...)。不合格的 CREATE 语句将在搜索路径的第一个模式中创建对象。
所以你需要做的就是改变 Django 用来连接数据库的用户:
alter user django_user set search_path to the_one_schema;
commit;
之后,例如create table foo 将在架构 the_one_schema 中创建表。
您需要注销然后重新登录才能使更改“生效”。
【讨论】: