在使用django时,如果某个表格明明存在,但是django报错“xxx” relation does not exist时,这是因为django默认搜索的schema
模式为public,熟悉的同学都知道可以在django工程setting.py
里添加search_path来解决。
|
|
其实,除了这一种方式外,不经过django也可以在postgresql中直接指定search_path:
1. 作用于全局范围
修改postgresql.conf
文件,改默认的search_path = "$user",public
为, 然后重启
search_path = 'blarg,public'
2. 针对某个数据库进行限定
ALTER DATABASE test SET search_path = blarg,public;
3. 针对某个用户名进行限定
ALTER ROLE foo SET search_path = blarg,public;
4. 同时针对用户名和数据库限定(推荐),因为这种方式最可控,不会出现意外情况
ALTER ROLE foo IN DATABASE test SET search_path = blarg,public;
同理,使用pgbouncer做 中间缓冲层的同学,因为貌似pgbouncer不支持django中search_path的设定,会报错djxdjango.db.utils.OperationalError: ERROR: Unsupported startup parameter: options
不支持上文中的options选项,所以,就能使用上面推荐的第4种方式在postgres中直接设定search_path。经过试用,木有出现问题,欢迎留言沟通交流。
参考文献: