我发现自己有一个django项目处理映射在类似表名上的两个不同的类:
class BarA(models.Model):
[...]
class Meta:
db_table = 'bar' # doesn't specify any schema
class BarB(models.Model):
[...]
class Meta:
db_table = u'foo"."bar'
项目正在使用包含两个模式的数据库:public
和foo
。
模板化和部署此应用程序的方式使事情更加混乱:在某些服务器上,django与用户“John”连接到数据库,不是任何角色的成员,而是在与用户“Eric”连接的其他服务器上, foo
角色的成员。
这里有两个问题:
foo.bar
表,而不是public.bar
表,而不管被调用的类。
对于用户“John”,我只使用BarA
课程并正确点击public.bar
。答案 0 :(得分:1)
在postgres search_path
variable中设置选择表格架构的优先级:
search_path(字符串)
此变量指定其中的顺序 在对象(表,数据类型,函数等)时搜索模式 由未指定架构的简单名称引用。当有 找到的是不同模式中具有相同名称的对象 首先使用搜索路径 [...]
可以通过SQL函数current_schemas检查搜索路径的当前有效值。
快速执行此操作:
SELECT current_schemas(True);
您可以在5.7.3节中找到有关如何管理search_path
的详细信息。本文:http://www.postgresql.org/docs/current/static/ddl-schemas.html