我试着在docker版本中使用PostGIS几何列。
当docker启动容器时,我会得到以下日志(为清楚起见,缩写为):
Loading PostGIS extensions into template_postgis
CREATE EXTENSION
CREATE EXTENSION
CREATE EXTENSION
CREATE EXTENSION
Loading PostGIS extensions into postgres
CREATE EXTENSION
CREATE EXTENSION
CREATE EXTENSION
CREATE EXTENSION
/usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/script.sql
其中script.sql包含以下内容:
CREATE TABLE public.spatial_data_wfs (
id int4 NOT NULL,
name varchar(255) NOT NULL,
featureid varchar(255) NOT NULL,
geofeature jsonb NOT NULL,
coordinates geometry NOT NULL
);
尽管在脚本之前加载了PostGIS扩展,但仍会出现以下错误:
psql:/docker-entrypoint-initdb.d/script.sql:238: ERROR: type "geometry" does not exist
LINE 6: coordinates geometry NOT NULL,
如果删除geometry列并等待容器启动,则可以使用alter table语句添加geometry列,并且它可以正常工作。
该脚本还定义了一个生成多边形的函数,该函数不会造成任何问题。基于其他SO问题,我尝试了以下方法:
-
创建postgis扩展:抱怨它已经被创建了。
-
使用ALTER DATABASE将搜索路径设置为包含postgis。没有抱怨,同样的问题。
我只能从日志中假设如下:
-
虽然安装了postgis,但仍然不能使用几何列,因为必须先完成其他操作。不管是什么,当postgres接受连接时,它已经完成了。
-
该函数仅针对语法进行验证-函数代码引用函数体中的几何类型这一事实在有人调用之前并不重要。