0

ここで Postgres / postgis / pgrouting galaxy を初めて使用します。Posgres サーバーの Docker インスタンスを作成する必要があります。いくつかの postgres 拡張機能がインストールされており、パブリック スキーマで使用できる機能を提供します。一部の機能にはアンダースコアがプレフィックスとして付けられています。コンテナの構築は正常に実行されますが、既存の DB スキーマをコンテナにインポートしようとすると、次のエラーで失敗します:

2020-07-31 08:15:40.623 UTC [90] ERROR:  function public._pgr_dijkstra(text, anyarray, anyarray, boolean, boolean, boolean) does not exist
2020-07-31 08:15:40.623 UTC [90] STATEMENT:  GRANT ALL ON FUNCTION public._pgr_dijkstra(edges_sql text, start_vids anyarray, end_vids anyarray, directed boolean, only_cost boolean, normal boolean, OUT seq integer, OUT path_seq integer, OUT start_vid bigint, OUT end_vid bigint, OUT node bigint, OUT edge bigint, OUT cost double precision, OUT agg_cost double precision) TO owenzek;
psql:/scripts/04_mis_db_dev_schema.sql:23572: ERROR:  function public._pgr_dijkstra(text, anyarray, anyarray, boolean, boolean, boolean) does not exist

どうやら PG ルーティング機能は使用できないようです。

でコンテナ インスタンスにインストールされている拡張機能を確認すると\dx、PGrouting がここにあるようです。

                                                                    List of installed extensions
          Name          | Version |   Schema   |                                                     Description                                                     
------------------------+---------+------------+---------------------------------------------------------------------------------------------------------------------
 address_standardizer   | 3.0.1   | public     | Used to parse an address into constituent elements. Generally used to support geocoding address normalization step.
 fuzzystrmatch          | 1.1     | public     | determine similarities and distance between strings
 ogr_fdw                | 1.0     | public     | foreign-data wrapper for GIS data access
 pgrouting              | 3.0.2   | public     | pgRouting Extension
 plpgsql                | 1.0     | pg_catalog | PL/pgSQL procedural language
 plr                    | 8.4     | public     | load R interpreter and execute R script from within a database
 pointcloud             | 1.2.1   | public     | data type for lidar point clouds
 pointcloud_postgis     | 1.2.1   | public     | integration for pointcloud LIDAR data and PostGIS geometry data
 postgis                | 3.0.1   | public     | PostGIS geometry, geography, and raster spatial types and functions
 postgis_raster         | 3.0.1   | public     | PostGIS raster types and functions
 postgis_sfcgal         | 3.0.1   | public     | PostGIS SFCGAL functions
 postgis_tiger_geocoder | 3.0.1   | tiger      | PostGIS tiger geocoder and reverse geocoder
 postgis_topology       | 3.0.1   | topology   | PostGIS topology spatial types and functions
 tablefunc              | 1.0     | public     | functions that manipulate whole tables, including crosstab

\df public._pgr_dijkstra以下を返します。

\df public._pgr_dijkstra
List of functions
 Schema |     Name      | Result data type |                                                                                                                                                                    Argument data types                                                                                                                                                                     | Type 
--------+---------------+------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------
 public | _pgr_dijkstra | SETOF record     | edges_sql text, start_vids anyarray, end_vids anyarray, directed boolean DEFAULT true, only_cost boolean DEFAULT false, normal boolean DEFAULT true, n_goals bigint DEFAULT 0, OUT seq integer, OUT path_seq integer, OUT start_vid bigint, OUT end_vid bigint, OUT node bigint, OUT edge bigint, OUT cost double precision, OUT agg_cost double precision | func
(1 row)

だから私は今まで間違っていたことについて少し混乱しています:/何をチェックすべきか手がかりはありますか?

下:今まで使っていたファイル

Dockerfile :

FROM postgres:11.2
ADD sql/*.sql /scripts/
LABEL maintainer="TRALALA"

ENV POSTGRES_VERSION 11
ENV POSTGIS_VERSION 3

# GIS Extensions installation
RUN apt-get update \
    && apt-get -y --no-install-recommends install \
        postgresql-common \
        postgis \
        postgresql-${POSTGRES_VERSION}-postgis-${POSTGIS_VERSION} \
        postgresql-${POSTGRES_VERSION}-postgis-${POSTGIS_VERSION}-scripts \
        postgresql-${POSTGRES_VERSION}-ogr-fdw \
        postgresql-${POSTGRES_VERSION}-cron \
        postgresql-plpython3-${POSTGRES_VERSION} \
        postgresql-${POSTGRES_VERSION}-pgrouting \
        postgresql-${POSTGRES_VERSION}-pgrouting-scripts \
        # postgresql-${POSTGRES_VERSION}-plr \
    && rm -rf /var/lib/apt/lists/* \
    && apt-get update && apt-get autoremove -y

# Pointcloud install
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        git \
        ca-certificates \
        build-essential \
        autoconf \
        automake \
        cmake \
        zlib1g-dev \
        postgresql-server-dev-all \
        libxml2-dev \
        ## PGRouting librairies
        libblkid-dev \
        e2fslibs-dev \
        libboost-all-dev \
        libaudit-dev \
    && rm -rf /var/lib/apt/lists/* \
    ## PGRouting install
    && git clone git://github.com/pgRouting/pgrouting.git \
    && cd pgrouting \
    && git checkout v3.0.2 \
    && mkdir build \
    && cd build \
    && cmake  .. \
    && make \
    && make install \
    && cd ../.. \
    && rm -r pgrouting \
    ## Laz-Perf install (pgpointcloud)
    && git clone https://github.com/verma/laz-perf.git \
    && cd laz-perf \
    && cmake . \
    && make \
    && make install \
    && cd .. \
    && rm -r laz-perf \
    ## PGPointcloud install
    && git clone https://github.com/pgpointcloud/pointcloud \
    && cd pointcloud \
    && ./autogen.sh \
    && ./configure --with-lazperf=/usr/local --with-pgconfig=/usr/lib/postgresql/${POSTGRES_VERSION}/bin/pg_config CFLAGS="-Wall -Werror -O2 -g" \
    && make \
    && make install \
    && apt-get purge -y --auto-remove \
        git \
        ca-certificates \
        build-essential \
        autoconf \
        automake \
        cmake \
        zlib1g-dev \
        postgresql-server-dev-all \
        libxml2-dev

# Somehow plr has to be installed after Pointcloud otherwise it gets uninstalled
RUN apt-get update \
    && apt-get -y --no-install-recommends install \
        postgresql-${POSTGRES_VERSION}-plr \
    && rm -rf /var/lib/apt/lists/* \
    && apt-get update && apt-get autoremove -y

EXPOSE 5433

ADD pointcloud/initdb-pgpointcloud.sh /docker-entrypoint-initdb.d/01_pgpointcloud.sh

initdb-pgpointcloud.sh

#!/bin/sh

##### Script based on initialization script from postgis-docker #####

set -e

# Perform all actions as $POSTGRES_USER
export PGUSER="$POSTGRES_USER"


# shellcheck disable=SC2002
"${psql[@]}" --dbname="$POSTGRES_DB" -f "/scripts/01_extensions.sql"
"${psql[@]}" --dbname="$POSTGRES_DB" -f "/scripts/02_globals.sql"
#"${psql[@]}" --dbname="$POSTGRES_DB" -f "/scripts/03_custom_functions.sql"
"${psql[@]}" --dbname="$POSTGRES_DB" -f "/scripts/04_mis_db_dev_schema.sql"

01_extensions.sql :

CREATE EXTENSION IF NOT EXISTS plpgsql CASCADE;
CREATE EXTENSION IF NOT EXISTS ogr_fdw CASCADE;
CREATE EXTENSION IF NOT EXISTS plr CASCADE;
CREATE EXTENSION IF NOT EXISTS tablefunc CASCADE;
CREATE EXTENSION IF NOT EXISTS postgis CASCADE;
CREATE EXTENSION IF NOT EXISTS postgis_raster CASCADE;
CREATE EXTENSION IF NOT EXISTS postgis_sfcgal CASCADE;
-- CREATE EXTENSION IF NOT EXISTS postgis_topology CASCADE;
-- CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder CASCADE;
CREATE EXTENSION IF NOT EXISTS address_standardizer CASCADE;
CREATE EXTENSION IF NOT EXISTS fuzzystrmatch CASCADE;
CREATE EXTENSION IF NOT EXISTS pgrouting CASCADE;
4

1 に答える 1