代码之家  ›  专栏  ›  技术社区  ›  Greg

在DOCKER启动过程中不存在关于几何类型的PASGRESH,然后决定它存在。

  •  0
  • Greg  · 技术社区  · 6 年前

    我试着在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问题,我尝试了以下方法:

    1. 创建postgis扩展:抱怨它已经被创建了。
    2. 使用ALTER DATABASE将搜索路径设置为包含postgis。没有抱怨,同样的问题。

    我只能从日志中假设如下:

    1. 虽然安装了postgis,但仍然不能使用几何列,因为必须先完成其他操作。不管是什么,当postgres接受连接时,它已经完成了。
    2. 该函数仅针对语法进行验证-函数代码引用函数体中的几何类型这一事实在有人调用之前并不重要。

    0 回复  |  直到 6 年前
        1
  •  0
  •   Greg    6 年前

    我发现了问题。数据库脚本最初是由某个工具创建的(我认为它可能是pgdump),然后添加了手动更改。这个工具在脚本的开头添加了一些不需要的语句。其中一项声明如下:

    SELECT pg_catalog.set_config('search_path', '', false);
    

    我想这个设置会覆盖“ALTER DATABASE设置搜索路径”。一旦我删除了该语句,脚本就可以正常工作,并创建表。