类型“几何”不存在

时间:2015-02-09 19:09:26

标签: postgresql docker gis geospatial postgis

我正在尝试为我们的某个产品构建一个带有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(Trusty)
  • PostgreSQL版本:9.3
  • PostGIS版本:2.1

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

2 个答案:

答案 0 :(得分:6)

经过几天这个问题的纠缠,我终于弄明白了。似乎在模式创建之后,从创建的数据库到另一个用户完成了GRANT。有效地不切换到该用户是问题。

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

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

谢谢大家的回复。

答案 1 :(得分:5)

试试这个:

psql my_database -c "CREATE EXTENSION postgis;"

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