ここで 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;