【问题标题】:Type geometry does not exist after CREATE EXTENSION postgisCREATE EXTENSION postgis 后类型几何不存在
【发布时间】:2014-10-06 19:38:44
【问题描述】:

创建新的 postgres 数据库并加载必要的 postgis 扩展后

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

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

在此之后,我尝试在 pgadmin 中运行失败的查询,结果也是一样:type "geometry" does not exist

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

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

【问题讨论】:

    标签: python django postgresql postgis django-oscar


    【解决方案1】:

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

    schema_name

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

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

    检查psql涉及哪些架构:

    \connect mydb
    \x 
    \dx postgis*
    

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

    【讨论】:

      【解决方案2】:

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

      GRANT ALL PRIVILEGES ON SCHEMA postgis TO username;

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2017-11-10
          • 2011-10-14
          • 2019-11-04
          • 2023-01-20
          • 2013-09-17
          • 2020-10-28
          • 2023-01-11
          • 1970-01-01
          • 2013-01-09
          相关资源
          最近更新 更多