在CREATE EXTENSION postgis之后,类型几何不存在

时间:2014-08-13 12:32:34

标签: python django postgresql postgis django-oscar

创建新的postgres db并加载必要的postgis扩展

$ createdb  demodb
$ psql demodb
> CREATE EXTENSION postgis;
> CREATE EXTENSION postgis_topology;

运行django django.db.utils.ProgrammingError: type "geometry" does not exist

时,我遇到manage.py migrate异常

在此之后,我尝试在pgadmin中运行失败的查询并且它说同样的话:type "geometry" does not exist

虽然在查询之前附加CREATE EXTENSION postgis;似乎解决了这个问题并且查询返回了确定。但是再次运行manage.py migrate会引发同样的异常。

是否未加载新的永久延期?如果是这样,我如何永久加载它,因此在运行migrate时会加载它?

3 个答案:

答案 0 :(得分:2)

对于您运行它的数据库,

CREATE EXTENSION永久。它在给定(或当前默认)架构中创建对象。 Per documentation:

  

<强> 模式名

     

安装扩展程序对象的架构名称,前提是该扩展程序允许重定位其内容。   指定的架构必须已存在。如果没有指定,那么   扩展程序的控制文件也没有指定架构,当前   使用默认对象创建模式。

     

请记住,扩展本身不被视为在任何模式中:扩展具有必须唯一的非限定名称   数据库范围内。但是属于扩展的对象可以在其中   模式。

检查psql中包含哪些模式:

\connect mydb
\x 
\dx postgis*

使用的模式必须在您当前的search_path中(或者您必须对所有引用进行模式限定)。
我不确定migrate是否包含其他模式或扩展。 最有可能的是,这是search_path

的问题

答案 1 :(得分:0)

我需要授予数据库用户访问postgis架构的权限。我连接到我的django数据库时运行以下命令,然后迁移能够成功运行。

GRANT ALL PRIVILEGES ON SCHEMA postgis TO username;

答案 2 :(得分:0)

对我来说grant usage on schema <postgis-install-schema> to <myschema>解决了它(<postgis-install-schema>在我的情况下是public

TechnoConserve 建议的grant all privileges可能因安全原因而过多)