4

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

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

django.db.utils.ProgrammingError: type "geometry" does not exist运行 django 时抛出异常manage.py migrate

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

尽管CREATE EXTENSION postgis;在查询之前追加似乎可以解决此问题并且查询返回正常。但是manage.py migrate再次运行抛出了同样的异常。

加载新扩展不是永久的吗?如果是这样,我怎样才能永久加载它,以便在运行时加载它migrate

4

3 回答 3

2

CREATE EXTENSION对于您在其中运行它的数据库是永久的。它在给定(或当前默认)模式中创建对象。根据文档:

模式名称

安装扩展对象的模式的名称,假设扩展允许其内容被重新定位。命名模式必须已经存在。如果未指定,并且扩展的控制文件也未指定模式,则使用当前默认的对象创建模式。

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

检查涉及哪些模式psql

\connect mydb
\x 
\dx postgis*

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

于 2014-08-13T13:41:43.863 回答
0

对我来说grant usage on schema <postgis-install-schema> to <myschema>解决了它(<postgis-install-schema>public我而言)。

(出于安全原因, TechnoConservegrant all privileges的建议可能太多了)

于 2017-11-13T08:47:18.460 回答
0

我需要授予我的数据库用户访问 postgis 模式的权限。我在连接到我的 django 数据库时运行了以下命令,然后 migrate 能够成功运行。

GRANT ALL PRIVILEGES ON SCHEMA postgis TO username;

于 2017-10-19T23:40:48.363 回答