Python 创建扩展插件后,类型几何图形不存在
创建新的postgres db并加载必要的postgis扩展后Python 创建扩展插件后,类型几何图形不存在,python,django,postgresql,postgis,django-oscar,Python,Django,Postgresql,Postgis,Django Oscar,创建新的postgres db并加载必要的postgis扩展后 $ createdb demodb $ psql demodb > CREATE EXTENSION postgis; > CREATE EXTENSION postgis_topology; 我获取django.db.utils.ProgrammingError:类型“geometry”不存在运行djangomanage.py migrate时引发异常 在此之后,我尝试在pgadmin中运行失败的查询,结果显示相同
$ createdb demodb
$ psql demodb
> CREATE EXTENSION postgis;
> CREATE EXTENSION postgis_topology;
我获取django.db.utils.ProgrammingError:类型“geometry”不存在
运行djangomanage.py migrate时引发异常
在此之后,我尝试在pgadmin中运行失败的查询,结果显示相同:类型“geometry”不存在
虽然追加创建扩展postgis代码>在查询似乎解决了这个问题之前,查询返回ok。但是运行manage.py migrate
时再次抛出相同的异常
加载新扩展不是永久性的吗?如果是这样,我如何永久加载它,以便在运行migrate
时加载它?CREATE EXTENSION
对于正在运行它的数据库来说是永久的。它在给定(或当前默认)模式中创建对象
模式名称
如果扩展允许重新定位其内容,则要在其中安装扩展对象的架构的名称。
命名架构必须已存在。若未指定,以及
扩展名的控制文件也没有指定架构,当前
使用默认的对象创建模式
请记住,扩展本身不在任何模式内:扩展具有必须唯一的非限定名称
数据库范围。但是属于扩展的对象可以在
模式
检查psql
中涉及哪些架构:
\connect mydb
\x
\dx postgis*
所使用的模式必须在当前的模式中(否则您必须对所有引用进行模式限定)。
我不确定migrate
是否包含其他模式或扩展。
这很可能是由于搜索路径的问题
我需要授予数据库用户访问postgis模式的权限。我在连接到django数据库时运行了以下命令,然后migrate成功运行
将SCHEMA postgis上的所有权限授予username代码>对于我来说,将模式上的用法授予
解决它(
在我的情况下是公共的
)
(根据TechnoConserve的建议授予所有特权
,出于安全原因可能太多)