【问题标题】:Type "geometry" does not exists [duplicate]类型“几何”不存在[重复]
【发布时间】:2015-04-09 15:26:34
【问题描述】:

我正在尝试为我们的一种产品构建一个带有 PostgreSQL 和 PostGIS 数据库的 Docker 映像。尽管基于 another PostGIS image 构建图像(和容器)并不难且有效。但是,在添加用于构建数据库的 ddl 时,我遇到了问题。

我不断收到消息:ERROR: type "geometry" does not exist。因此,我在互联网上阅读和阅读,主要根源似乎是我没有正确初始化 PostGIS Extensions。因此,我在模板表上执行此操作并运行SELECT postgis_full_version() 返回POSTGIS="2.1.3 r12547" GEOS="3.4.2-CAPI-1.8.2 r3921" PROJ="Rel. 4.8.0, 6 March 2012" GDAL="GDAL 1.10.1, released 2013/08/26" LIBXML="2.9.1" LIBJSON="UNKNOWN" TOPOLOGY RASTER,这似乎没问题。但是还是没有骰子...

在通过\dT 检查公共架构中的可用数据类型后,我发现geometry 类型可用。这就是为什么我在这里有点不知所措,因为一切似乎都很好。

任何人有任何想法我可以如何解决这个问题,或者我可以寻找什么?

使用过的版本:

  • Ubuntu 14.04(可信)
  • PostgreSQL 版本:9.3
  • PostGIS 版本:2.1

编辑:我再次尝试创建扩展,而不是停止 PostgreSQL,运行 ldconfig(重新加载库)并再次启动 PostgreSQL,但同样的问题仍然存在。

【问题讨论】:

  • 它将 postgis 安装到什么模式? show search_path; 中是否列出了该架构?
  • 你能在ldconfig -v 的输出中找到postgis/gdal/geos/proj4 扩展吗?
  • 您在哪个数据库中安装了 PostGIS?您在哪个数据库中遇到错误?
  • @wildplasser libproj*.so、libgeos*.so、libgeos_c*.so 和 libgdal*.so 都可用。我似乎找不到任何 postgis*.so 库。
  • @MikeSherrill'CatRecall' 在一个新数据库中,基于我创建并添加了扩展的 template_postgis。在尝试再次加载扩展后,我收到一个关于扩展已加载的错误。

标签: postgresql docker gis geospatial postgis


【解决方案1】:

在为这个问题苦苦挣扎了好几天之后,我终于弄明白了。似乎在架构创建之后,从创建的数据库到另一个用户完成了GRANT。实际上没有切换到该用户是问题所在。

我现在所做的是运行使用默认 postgres/postgis 用户提供给我的 create-user.sqlcreate-database.sql 文件,并使用在第一个 sql 文件中创建的新用户运行其余文件。之后问题就消失了。顺便说一句,两个用户的 search_path 相同,PostGIS_full_version() 的结果也完全相同。

所以,供将来参考;如果您为数据库创建另一个用户,请在创建数据库后切换到该用户,否则 PostGIS 可能会遇到有关其数据类型的问题。

感谢大家的回复。

【讨论】:

    【解决方案2】:

    试试这个:

    psql my_database -c "CREATE EXTENSION postgis;"
    

    您必须创建/启用 postgis 扩展。

    【讨论】:

    • 就像我在 OP 中所说的那样,我已经这样做了。否则我连 PostGIS 版本都拿不回来了。
    • 您是否使用 ON_ERROR_STOP=1 标志运行 postgis 安装?
    • 是的,但只得到了同样的错误:ERROR: type "geometry" does not exist,但只有一次而不是两次。
    猜你喜欢
    • 2011-10-14
    • 2014-10-06
    • 2019-04-22
    • 2011-10-20
    • 1970-01-01
    • 2023-01-20
    • 2019-08-19
    • 2019-11-04
    • 2021-02-03
    相关资源
    最近更新 更多