创建新的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
时会加载它?
答案 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
可能因安全原因而过多)