我正在尝试为我们的某个产品构建一个带有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
类型。这就是为什么我在这里有点无能为力,因为一切似乎都很好。
任何人都有任何想法如何解决这个问题,或者我能找到什么?
二手版本:
编辑:我正在尝试再次尝试创建扩展,而不是停止PostgreSQL,运行ldconfig
(重新加载lib)并再次启动PostgreSQL,但同样的问题仍然存在。
答案 0 :(得分:6)
经过几天这个问题的纠缠,我终于弄明白了。似乎在模式创建之后,从创建的数据库到另一个用户完成了GRANT
。有效地不切换到该用户是问题。
我现在所做的是运行使用默认postgres / postgis用户提供给我的create-user.sql
和create-database.sql
文件,并使用在其中创建的新用户运行其余文件第一个sql文件。之后问题就消失了。顺便提一下,search_path对于两个用户都是相同的,PostGIS_full_version()
的结果也完全相同。
所以,以备将来参考;如果为数据库创建另一个用户,请在创建数据库后切换到该用户,否则PostGIS可能会遇到与其数据类型有关的问题。
谢谢大家的回复。
答案 1 :(得分:5)
试试这个:
psql my_database -c "CREATE EXTENSION postgis;"
您必须创建/启用postgis扩展程序。