From 804e5165b0316bcb7fc779e954894fccd2ff92a3 Mon Sep 17 00:00:00 2001 From: ImreSamu Date: Wed, 15 Apr 2026 23:22:58 +0200 Subject: [PATCH] Update PostGIS 3.6.3, prepare for 3.7, and refresh images - Remove PostgreSQL 13 images. - Update Alpine images to Alpine 3.23. - Update PostgreSQL 18 / PostGIS 3.6.3 Debian and Alpine images. - Refresh master images: - Remove 16-master. - Move 17-master and 18-master to Debian Trixie. - Fix Trixie dependencies: PCRE2, TIFF6, t64 runtime packages, and Boost 1.83 alignment. - Build CGAL from the 6.1.x branch for SFCGAL compatibility. - Install h3/h3_postgis and address_standardizer from their upstream main branches. - Run targeted h3-pg regress tests and address_standardizer installcheck. - Prepare for PostGIS >= 3.7: - Update initdb-postgis.sh for optional extension changes. - Handle address_standardizer and postgis_tiger_geocoder moving out of PostGIS itself. - Update postgis-basics to require address_standardizer tests for PostGIS 3.5/3.6 and run them for 3.7+ when available. - Update README.md with the supported version range, Alpine 3.23 package versions, and master image notes. - Update GitHub workflow for the refreshed image matrix. --- .github/workflows/main.yml | 6 +- 13-3.5/Dockerfile | 28 ---- 13-3.5/alpine/Dockerfile | 126 --------------- 13-3.5/alpine/initdb-postgis.sh | 25 --- 13-3.5/initdb-postgis.sh | 25 --- 13-3.5/update-postgis.sh | 28 ---- 14-3.5/alpine/Dockerfile | 8 +- 14-3.5/alpine/initdb-postgis.sh | 20 ++- 14-3.5/initdb-postgis.sh | 20 ++- 15-3.5/alpine/Dockerfile | 8 +- 15-3.5/alpine/initdb-postgis.sh | 20 ++- 15-3.5/initdb-postgis.sh | 20 ++- 16-3.5/alpine/Dockerfile | 8 +- 16-3.5/alpine/initdb-postgis.sh | 20 ++- 16-3.5/initdb-postgis.sh | 20 ++- 16-master/initdb-postgis.sh | 25 --- 16-master/update-postgis.sh | 28 ---- 17-3.5/alpine/Dockerfile | 8 +- 17-3.5/alpine/initdb-postgis.sh | 20 ++- 17-3.5/initdb-postgis.sh | 20 ++- 17-3.6/alpine/Dockerfile | 8 +- 17-3.6/alpine/initdb-postgis.sh | 20 ++- 17-master/Dockerfile | 149 +++++++++++------- 17-master/initdb-postgis.sh | 20 ++- 18-3.6/Dockerfile | 4 +- 18-3.6/alpine/Dockerfile | 8 +- 18-3.6/alpine/initdb-postgis.sh | 20 ++- 18-3.6/initdb-postgis.sh | 20 ++- {16-master => 18-master}/Dockerfile | 149 +++++++++++------- 18-master/initdb-postgis.sh | 41 +++++ .../alpine => 18-master}/update-postgis.sh | 0 Dockerfile.alpine.template | 2 +- Dockerfile.master.template | 87 +++++++--- README.md | 47 +++--- initdb-postgis.sh | 20 ++- test/tests/postgis-basics/run.sh | 40 ++++- update.sh | 17 +- 37 files changed, 628 insertions(+), 507 deletions(-) delete mode 100644 13-3.5/Dockerfile delete mode 100644 13-3.5/alpine/Dockerfile delete mode 100644 13-3.5/alpine/initdb-postgis.sh delete mode 100644 13-3.5/initdb-postgis.sh delete mode 100755 13-3.5/update-postgis.sh delete mode 100644 16-master/initdb-postgis.sh delete mode 100755 16-master/update-postgis.sh rename {16-master => 18-master}/Dockerfile (72%) create mode 100644 18-master/initdb-postgis.sh rename {13-3.5/alpine => 18-master}/update-postgis.sh (100%) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d2ab31e4a..9de87d981 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,11 +16,11 @@ jobs: strategy: matrix: runner-platform: ['ubuntu-24.04', 'ubuntu-24.04-arm'] - postgres: [13, 14, 15, 16, 17 ] + postgres: [14, 15, 16, 17] postgis: ['3.5'] variant: [default, alpine] include: - - postgres: 16 + - postgres: 18 postgis: master variant: default runner-platform: 'ubuntu-24.04' @@ -28,7 +28,7 @@ jobs: postgis: master variant: default runner-platform: 'ubuntu-24.04' - - postgres: 16 + - postgres: 18 postgis: master variant: default runner-platform: 'ubuntu-24.04-arm' diff --git a/13-3.5/Dockerfile b/13-3.5/Dockerfile deleted file mode 100644 index e4071196d..000000000 --- a/13-3.5/Dockerfile +++ /dev/null @@ -1,28 +0,0 @@ -# -# NOTE: THIS DOCKERFILE IS GENERATED VIA "make update"! PLEASE DO NOT EDIT IT DIRECTLY. -# - -FROM docker.io/postgres:13-bullseye - -LABEL maintainer="PostGIS Project - https://postgis.net" \ - org.opencontainers.image.description="PostGIS 3.5.2+dfsg-1.pgdg110+1 spatial database extension with PostgreSQL 13 bullseye" \ - org.opencontainers.image.source="https://github.com/postgis/docker-postgis" - -ENV POSTGIS_MAJOR=3 -ENV POSTGIS_VERSION=3.5.2+dfsg-1.pgdg110+1 - -RUN apt-get update \ - && apt-cache showpkg postgresql-$PG_MAJOR-postgis-$POSTGIS_MAJOR \ - && apt-get install -y --no-install-recommends \ - # ca-certificates: for accessing remote raster files; - # fix: https://github.com/postgis/docker-postgis/issues/307 - ca-certificates \ - \ - postgresql-$PG_MAJOR-postgis-$POSTGIS_MAJOR=$POSTGIS_VERSION \ - postgresql-$PG_MAJOR-postgis-$POSTGIS_MAJOR-scripts \ - && rm -rf /var/lib/apt/lists/* - -RUN mkdir -p /docker-entrypoint-initdb.d -COPY ./initdb-postgis.sh /docker-entrypoint-initdb.d/10_postgis.sh -COPY ./update-postgis.sh /usr/local/bin - diff --git a/13-3.5/alpine/Dockerfile b/13-3.5/alpine/Dockerfile deleted file mode 100644 index 01c34e906..000000000 --- a/13-3.5/alpine/Dockerfile +++ /dev/null @@ -1,126 +0,0 @@ -# -# NOTE: THIS DOCKERFILE IS GENERATED VIA "make update"! PLEASE DO NOT EDIT IT DIRECTLY. -# -ARG BASE_IMAGE=postgres:13-alpine3.22 -FROM ${BASE_IMAGE} - -ARG NPROC= - -LABEL maintainer="PostGIS Project - https://postgis.net" \ - org.opencontainers.image.description="PostGIS 3.5.5 spatial database extension with PostgreSQL 13 Alpine" \ - org.opencontainers.image.source="https://github.com/postgis/docker-postgis" - -ENV POSTGIS_VERSION=3.5.5 -ENV POSTGIS_SHA256=fc3408c474662b5354c9569cfbd18172f2f4818c09945725b8d0089169925fb1 - -RUN set -eux \ - && apk add --no-cache --virtual .fetch-deps \ - ca-certificates \ - openssl \ - tar \ - \ - && wget -O postgis.tar.gz "https://github.com/postgis/postgis/archive/${POSTGIS_VERSION}.tar.gz" \ - && echo "${POSTGIS_SHA256} *postgis.tar.gz" | sha256sum -c - \ - && mkdir -p /usr/src/postgis \ - && tar \ - --extract \ - --file postgis.tar.gz \ - --directory /usr/src/postgis \ - --strip-components 1 \ - && rm postgis.tar.gz \ - \ - && apk add --no-cache --virtual .build-deps \ - \ - gdal-dev \ - geos-dev \ - proj-dev \ - proj-util \ - sfcgal-dev \ - \ - # The upstream variable, '$DOCKER_PG_LLVM_DEPS' contains - # the correct versions of 'llvm-dev' and 'clang' for the current version of PostgreSQL. - # This improvement has been discussed in https://github.com/docker-library/postgres/pull/1077 - $DOCKER_PG_LLVM_DEPS \ - \ - autoconf \ - automake \ - cunit-dev \ - file \ - g++ \ - gcc \ - gettext-dev \ - git \ - json-c-dev \ - libtool \ - libxml2-dev \ - make \ - pcre2-dev \ - perl \ - protobuf-c-dev \ - \ -# build PostGIS - with Link Time Optimization (LTO) enabled - && cd /usr/src/postgis \ - && gettextize \ - && ./autogen.sh \ - && ./configure \ - --enable-lto \ - && make -j${NPROC:-$(nproc)} \ - && make install \ - \ -# This section is for refreshing the proj data for the regression tests. -# It serves as a workaround for an issue documented at https://trac.osgeo.org/postgis/ticket/5316 -# This increases the Docker image size by about 1 MB. - && projsync --system-directory --file ch_swisstopo_CHENyx06_ETRS \ - && projsync --system-directory --file us_noaa_eshpgn \ - && projsync --system-directory --file us_noaa_prvi \ - && projsync --system-directory --file us_noaa_wmhpgn \ -# This section performs a regression check. - && mkdir /tempdb \ - && chown -R postgres:postgres /tempdb \ - && su postgres -c 'pg_ctl -D /tempdb init' \ - && su postgres -c 'pg_ctl -D /tempdb -c -l /tmp/logfile -o '-F' start ' \ - && cd regress \ - && make -j${NPROC:-$(nproc)} check RUNTESTFLAGS="--extension --verbose" PGUSER=postgres \ - \ - && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS postgis;"' \ - && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS postgis_raster;"' \ - && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS postgis_sfcgal;"' \ - && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; --needed for postgis_tiger_geocoder "' \ - && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS address_standardizer;"' \ - && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS address_standardizer_data_us;"' \ - && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder;"' \ - && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS postgis_topology;"' \ - && su postgres -c 'psql -t -c "SELECT version();"' >> /_pgis_full_version.txt \ - && su postgres -c 'psql -t -c "SELECT PostGIS_Full_Version();"' >> /_pgis_full_version.txt \ - && su postgres -c 'psql -t -c "\dx"' >> /_pgis_full_version.txt \ - \ - && su postgres -c 'pg_ctl -D /tempdb --mode=immediate stop' \ - && rm -rf /tempdb \ - && rm -rf /tmp/logfile \ - && rm -rf /tmp/pgis_reg \ -# add .postgis-rundeps - && apk add --no-cache --virtual .postgis-rundeps \ - \ - gdal \ - geos \ - proj \ - sfcgal \ - \ - json-c \ - libstdc++ \ - pcre2 \ - protobuf-c \ - \ - # ca-certificates: for accessing remote raster files - # fix https://github.com/postgis/docker-postgis/issues/307 - ca-certificates \ -# clean - && cd / \ - && rm -rf /usr/src/postgis \ - && apk del .fetch-deps .build-deps \ -# At the end of the build, we print the collected information -# from the '/_pgis_full_version.txt' file. This is for experimental and internal purposes. - && cat /_pgis_full_version.txt - -COPY ./initdb-postgis.sh /docker-entrypoint-initdb.d/10_postgis.sh -COPY ./update-postgis.sh /usr/local/bin diff --git a/13-3.5/alpine/initdb-postgis.sh b/13-3.5/alpine/initdb-postgis.sh deleted file mode 100644 index e38ad7d66..000000000 --- a/13-3.5/alpine/initdb-postgis.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -set -e - -# Perform all actions as $POSTGRES_USER -export PGUSER="$POSTGRES_USER" - -# Create the 'template_postgis' template db -"${psql[@]}" <<- 'EOSQL' -CREATE DATABASE template_postgis IS_TEMPLATE true; -EOSQL - -# Load PostGIS into both template_database and $POSTGRES_DB -for DB in template_postgis "$POSTGRES_DB"; do - echo "Loading PostGIS extensions into $DB" - "${psql[@]}" --dbname="$DB" <<-'EOSQL' - CREATE EXTENSION IF NOT EXISTS postgis; - CREATE EXTENSION IF NOT EXISTS postgis_topology; - -- Reconnect to update pg_setting.resetval - -- See https://github.com/postgis/docker-postgis/issues/288 - \c - CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; - CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; -EOSQL -done diff --git a/13-3.5/initdb-postgis.sh b/13-3.5/initdb-postgis.sh deleted file mode 100644 index e38ad7d66..000000000 --- a/13-3.5/initdb-postgis.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -set -e - -# Perform all actions as $POSTGRES_USER -export PGUSER="$POSTGRES_USER" - -# Create the 'template_postgis' template db -"${psql[@]}" <<- 'EOSQL' -CREATE DATABASE template_postgis IS_TEMPLATE true; -EOSQL - -# Load PostGIS into both template_database and $POSTGRES_DB -for DB in template_postgis "$POSTGRES_DB"; do - echo "Loading PostGIS extensions into $DB" - "${psql[@]}" --dbname="$DB" <<-'EOSQL' - CREATE EXTENSION IF NOT EXISTS postgis; - CREATE EXTENSION IF NOT EXISTS postgis_topology; - -- Reconnect to update pg_setting.resetval - -- See https://github.com/postgis/docker-postgis/issues/288 - \c - CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; - CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; -EOSQL -done diff --git a/13-3.5/update-postgis.sh b/13-3.5/update-postgis.sh deleted file mode 100755 index 3e60e3983..000000000 --- a/13-3.5/update-postgis.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh - -set -e - -# Perform all actions as $POSTGRES_USER -export PGUSER="$POSTGRES_USER" - -POSTGIS_VERSION="${POSTGIS_VERSION%%+*}" - -# Load PostGIS into both template_database and $POSTGRES_DB -for DB in template_postgis "$POSTGRES_DB" "${@}"; do - echo "Updating PostGIS extensions '$DB' to $POSTGIS_VERSION" - psql --dbname="$DB" -c " - -- Upgrade PostGIS (includes raster) - CREATE EXTENSION IF NOT EXISTS postgis VERSION '$POSTGIS_VERSION'; - ALTER EXTENSION postgis UPDATE TO '$POSTGIS_VERSION'; - - -- Upgrade Topology - CREATE EXTENSION IF NOT EXISTS postgis_topology VERSION '$POSTGIS_VERSION'; - ALTER EXTENSION postgis_topology UPDATE TO '$POSTGIS_VERSION'; - - -- Install Tiger dependencies in case not already installed - CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; - -- Upgrade US Tiger Geocoder - CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder VERSION '$POSTGIS_VERSION'; - ALTER EXTENSION postgis_tiger_geocoder UPDATE TO '$POSTGIS_VERSION'; - " -done diff --git a/14-3.5/alpine/Dockerfile b/14-3.5/alpine/Dockerfile index e49a5be13..5e7044bff 100644 --- a/14-3.5/alpine/Dockerfile +++ b/14-3.5/alpine/Dockerfile @@ -1,17 +1,17 @@ # # NOTE: THIS DOCKERFILE IS GENERATED VIA "make update"! PLEASE DO NOT EDIT IT DIRECTLY. # -ARG BASE_IMAGE=postgres:14-alpine3.22 +ARG BASE_IMAGE=postgres:14-alpine3.23 FROM ${BASE_IMAGE} ARG NPROC= LABEL maintainer="PostGIS Project - https://postgis.net" \ - org.opencontainers.image.description="PostGIS 3.5.5 spatial database extension with PostgreSQL 14 Alpine" \ + org.opencontainers.image.description="PostGIS 3.5.6 spatial database extension with PostgreSQL 14 Alpine" \ org.opencontainers.image.source="https://github.com/postgis/docker-postgis" -ENV POSTGIS_VERSION=3.5.5 -ENV POSTGIS_SHA256=fc3408c474662b5354c9569cfbd18172f2f4818c09945725b8d0089169925fb1 +ENV POSTGIS_VERSION=3.5.6 +ENV POSTGIS_SHA256=b002b067d2a0e10374d487e03259b44020cad11ba06a34bd9b4f02c242694a05 RUN set -eux \ && apk add --no-cache --virtual .fetch-deps \ diff --git a/14-3.5/alpine/initdb-postgis.sh b/14-3.5/alpine/initdb-postgis.sh index e38ad7d66..ae56ee0ba 100644 --- a/14-3.5/alpine/initdb-postgis.sh +++ b/14-3.5/alpine/initdb-postgis.sh @@ -19,7 +19,23 @@ for DB in template_postgis "$POSTGRES_DB"; do -- Reconnect to update pg_setting.resetval -- See https://github.com/postgis/docker-postgis/issues/288 \c - CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; - CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + -- + DO $$ + DECLARE + postgis_major integer; + postgis_minor integer; + BEGIN + SELECT substring(postgis_lib_version() from '^([0-9]+)')::integer, + substring(postgis_lib_version() from '^[0-9]+\.([0-9]+)')::integer + INTO postgis_major, postgis_minor; + + -- Install the legacy tiger geocoder stack only for PostGIS versions before 3.7. + -- fuzzystrmatch is required by postgis_tiger_geocoder, which PostGIS 3.7 and later no longer provide. + IF postgis_major < 3 OR (postgis_major = 3 AND postgis_minor < 7) THEN + CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; + CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + END IF; + END + $$; EOSQL done diff --git a/14-3.5/initdb-postgis.sh b/14-3.5/initdb-postgis.sh index e38ad7d66..ae56ee0ba 100644 --- a/14-3.5/initdb-postgis.sh +++ b/14-3.5/initdb-postgis.sh @@ -19,7 +19,23 @@ for DB in template_postgis "$POSTGRES_DB"; do -- Reconnect to update pg_setting.resetval -- See https://github.com/postgis/docker-postgis/issues/288 \c - CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; - CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + -- + DO $$ + DECLARE + postgis_major integer; + postgis_minor integer; + BEGIN + SELECT substring(postgis_lib_version() from '^([0-9]+)')::integer, + substring(postgis_lib_version() from '^[0-9]+\.([0-9]+)')::integer + INTO postgis_major, postgis_minor; + + -- Install the legacy tiger geocoder stack only for PostGIS versions before 3.7. + -- fuzzystrmatch is required by postgis_tiger_geocoder, which PostGIS 3.7 and later no longer provide. + IF postgis_major < 3 OR (postgis_major = 3 AND postgis_minor < 7) THEN + CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; + CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + END IF; + END + $$; EOSQL done diff --git a/15-3.5/alpine/Dockerfile b/15-3.5/alpine/Dockerfile index ebea21ba8..bbd798861 100644 --- a/15-3.5/alpine/Dockerfile +++ b/15-3.5/alpine/Dockerfile @@ -1,17 +1,17 @@ # # NOTE: THIS DOCKERFILE IS GENERATED VIA "make update"! PLEASE DO NOT EDIT IT DIRECTLY. # -ARG BASE_IMAGE=postgres:15-alpine3.22 +ARG BASE_IMAGE=postgres:15-alpine3.23 FROM ${BASE_IMAGE} ARG NPROC= LABEL maintainer="PostGIS Project - https://postgis.net" \ - org.opencontainers.image.description="PostGIS 3.5.5 spatial database extension with PostgreSQL 15 Alpine" \ + org.opencontainers.image.description="PostGIS 3.5.6 spatial database extension with PostgreSQL 15 Alpine" \ org.opencontainers.image.source="https://github.com/postgis/docker-postgis" -ENV POSTGIS_VERSION=3.5.5 -ENV POSTGIS_SHA256=fc3408c474662b5354c9569cfbd18172f2f4818c09945725b8d0089169925fb1 +ENV POSTGIS_VERSION=3.5.6 +ENV POSTGIS_SHA256=b002b067d2a0e10374d487e03259b44020cad11ba06a34bd9b4f02c242694a05 RUN set -eux \ && apk add --no-cache --virtual .fetch-deps \ diff --git a/15-3.5/alpine/initdb-postgis.sh b/15-3.5/alpine/initdb-postgis.sh index e38ad7d66..ae56ee0ba 100644 --- a/15-3.5/alpine/initdb-postgis.sh +++ b/15-3.5/alpine/initdb-postgis.sh @@ -19,7 +19,23 @@ for DB in template_postgis "$POSTGRES_DB"; do -- Reconnect to update pg_setting.resetval -- See https://github.com/postgis/docker-postgis/issues/288 \c - CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; - CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + -- + DO $$ + DECLARE + postgis_major integer; + postgis_minor integer; + BEGIN + SELECT substring(postgis_lib_version() from '^([0-9]+)')::integer, + substring(postgis_lib_version() from '^[0-9]+\.([0-9]+)')::integer + INTO postgis_major, postgis_minor; + + -- Install the legacy tiger geocoder stack only for PostGIS versions before 3.7. + -- fuzzystrmatch is required by postgis_tiger_geocoder, which PostGIS 3.7 and later no longer provide. + IF postgis_major < 3 OR (postgis_major = 3 AND postgis_minor < 7) THEN + CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; + CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + END IF; + END + $$; EOSQL done diff --git a/15-3.5/initdb-postgis.sh b/15-3.5/initdb-postgis.sh index e38ad7d66..ae56ee0ba 100644 --- a/15-3.5/initdb-postgis.sh +++ b/15-3.5/initdb-postgis.sh @@ -19,7 +19,23 @@ for DB in template_postgis "$POSTGRES_DB"; do -- Reconnect to update pg_setting.resetval -- See https://github.com/postgis/docker-postgis/issues/288 \c - CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; - CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + -- + DO $$ + DECLARE + postgis_major integer; + postgis_minor integer; + BEGIN + SELECT substring(postgis_lib_version() from '^([0-9]+)')::integer, + substring(postgis_lib_version() from '^[0-9]+\.([0-9]+)')::integer + INTO postgis_major, postgis_minor; + + -- Install the legacy tiger geocoder stack only for PostGIS versions before 3.7. + -- fuzzystrmatch is required by postgis_tiger_geocoder, which PostGIS 3.7 and later no longer provide. + IF postgis_major < 3 OR (postgis_major = 3 AND postgis_minor < 7) THEN + CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; + CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + END IF; + END + $$; EOSQL done diff --git a/16-3.5/alpine/Dockerfile b/16-3.5/alpine/Dockerfile index df519a92e..e4b4a1b41 100644 --- a/16-3.5/alpine/Dockerfile +++ b/16-3.5/alpine/Dockerfile @@ -1,17 +1,17 @@ # # NOTE: THIS DOCKERFILE IS GENERATED VIA "make update"! PLEASE DO NOT EDIT IT DIRECTLY. # -ARG BASE_IMAGE=postgres:16-alpine3.22 +ARG BASE_IMAGE=postgres:16-alpine3.23 FROM ${BASE_IMAGE} ARG NPROC= LABEL maintainer="PostGIS Project - https://postgis.net" \ - org.opencontainers.image.description="PostGIS 3.5.5 spatial database extension with PostgreSQL 16 Alpine" \ + org.opencontainers.image.description="PostGIS 3.5.6 spatial database extension with PostgreSQL 16 Alpine" \ org.opencontainers.image.source="https://github.com/postgis/docker-postgis" -ENV POSTGIS_VERSION=3.5.5 -ENV POSTGIS_SHA256=fc3408c474662b5354c9569cfbd18172f2f4818c09945725b8d0089169925fb1 +ENV POSTGIS_VERSION=3.5.6 +ENV POSTGIS_SHA256=b002b067d2a0e10374d487e03259b44020cad11ba06a34bd9b4f02c242694a05 RUN set -eux \ && apk add --no-cache --virtual .fetch-deps \ diff --git a/16-3.5/alpine/initdb-postgis.sh b/16-3.5/alpine/initdb-postgis.sh index e38ad7d66..ae56ee0ba 100644 --- a/16-3.5/alpine/initdb-postgis.sh +++ b/16-3.5/alpine/initdb-postgis.sh @@ -19,7 +19,23 @@ for DB in template_postgis "$POSTGRES_DB"; do -- Reconnect to update pg_setting.resetval -- See https://github.com/postgis/docker-postgis/issues/288 \c - CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; - CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + -- + DO $$ + DECLARE + postgis_major integer; + postgis_minor integer; + BEGIN + SELECT substring(postgis_lib_version() from '^([0-9]+)')::integer, + substring(postgis_lib_version() from '^[0-9]+\.([0-9]+)')::integer + INTO postgis_major, postgis_minor; + + -- Install the legacy tiger geocoder stack only for PostGIS versions before 3.7. + -- fuzzystrmatch is required by postgis_tiger_geocoder, which PostGIS 3.7 and later no longer provide. + IF postgis_major < 3 OR (postgis_major = 3 AND postgis_minor < 7) THEN + CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; + CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + END IF; + END + $$; EOSQL done diff --git a/16-3.5/initdb-postgis.sh b/16-3.5/initdb-postgis.sh index e38ad7d66..ae56ee0ba 100644 --- a/16-3.5/initdb-postgis.sh +++ b/16-3.5/initdb-postgis.sh @@ -19,7 +19,23 @@ for DB in template_postgis "$POSTGRES_DB"; do -- Reconnect to update pg_setting.resetval -- See https://github.com/postgis/docker-postgis/issues/288 \c - CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; - CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + -- + DO $$ + DECLARE + postgis_major integer; + postgis_minor integer; + BEGIN + SELECT substring(postgis_lib_version() from '^([0-9]+)')::integer, + substring(postgis_lib_version() from '^[0-9]+\.([0-9]+)')::integer + INTO postgis_major, postgis_minor; + + -- Install the legacy tiger geocoder stack only for PostGIS versions before 3.7. + -- fuzzystrmatch is required by postgis_tiger_geocoder, which PostGIS 3.7 and later no longer provide. + IF postgis_major < 3 OR (postgis_major = 3 AND postgis_minor < 7) THEN + CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; + CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + END IF; + END + $$; EOSQL done diff --git a/16-master/initdb-postgis.sh b/16-master/initdb-postgis.sh deleted file mode 100644 index e38ad7d66..000000000 --- a/16-master/initdb-postgis.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -set -e - -# Perform all actions as $POSTGRES_USER -export PGUSER="$POSTGRES_USER" - -# Create the 'template_postgis' template db -"${psql[@]}" <<- 'EOSQL' -CREATE DATABASE template_postgis IS_TEMPLATE true; -EOSQL - -# Load PostGIS into both template_database and $POSTGRES_DB -for DB in template_postgis "$POSTGRES_DB"; do - echo "Loading PostGIS extensions into $DB" - "${psql[@]}" --dbname="$DB" <<-'EOSQL' - CREATE EXTENSION IF NOT EXISTS postgis; - CREATE EXTENSION IF NOT EXISTS postgis_topology; - -- Reconnect to update pg_setting.resetval - -- See https://github.com/postgis/docker-postgis/issues/288 - \c - CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; - CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; -EOSQL -done diff --git a/16-master/update-postgis.sh b/16-master/update-postgis.sh deleted file mode 100755 index 3e60e3983..000000000 --- a/16-master/update-postgis.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh - -set -e - -# Perform all actions as $POSTGRES_USER -export PGUSER="$POSTGRES_USER" - -POSTGIS_VERSION="${POSTGIS_VERSION%%+*}" - -# Load PostGIS into both template_database and $POSTGRES_DB -for DB in template_postgis "$POSTGRES_DB" "${@}"; do - echo "Updating PostGIS extensions '$DB' to $POSTGIS_VERSION" - psql --dbname="$DB" -c " - -- Upgrade PostGIS (includes raster) - CREATE EXTENSION IF NOT EXISTS postgis VERSION '$POSTGIS_VERSION'; - ALTER EXTENSION postgis UPDATE TO '$POSTGIS_VERSION'; - - -- Upgrade Topology - CREATE EXTENSION IF NOT EXISTS postgis_topology VERSION '$POSTGIS_VERSION'; - ALTER EXTENSION postgis_topology UPDATE TO '$POSTGIS_VERSION'; - - -- Install Tiger dependencies in case not already installed - CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; - -- Upgrade US Tiger Geocoder - CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder VERSION '$POSTGIS_VERSION'; - ALTER EXTENSION postgis_tiger_geocoder UPDATE TO '$POSTGIS_VERSION'; - " -done diff --git a/17-3.5/alpine/Dockerfile b/17-3.5/alpine/Dockerfile index 7f5cb06ca..a217cf3f1 100644 --- a/17-3.5/alpine/Dockerfile +++ b/17-3.5/alpine/Dockerfile @@ -1,17 +1,17 @@ # # NOTE: THIS DOCKERFILE IS GENERATED VIA "make update"! PLEASE DO NOT EDIT IT DIRECTLY. # -ARG BASE_IMAGE=postgres:17-alpine3.22 +ARG BASE_IMAGE=postgres:17-alpine3.23 FROM ${BASE_IMAGE} ARG NPROC= LABEL maintainer="PostGIS Project - https://postgis.net" \ - org.opencontainers.image.description="PostGIS 3.5.5 spatial database extension with PostgreSQL 17 Alpine" \ + org.opencontainers.image.description="PostGIS 3.5.6 spatial database extension with PostgreSQL 17 Alpine" \ org.opencontainers.image.source="https://github.com/postgis/docker-postgis" -ENV POSTGIS_VERSION=3.5.5 -ENV POSTGIS_SHA256=fc3408c474662b5354c9569cfbd18172f2f4818c09945725b8d0089169925fb1 +ENV POSTGIS_VERSION=3.5.6 +ENV POSTGIS_SHA256=b002b067d2a0e10374d487e03259b44020cad11ba06a34bd9b4f02c242694a05 RUN set -eux \ && apk add --no-cache --virtual .fetch-deps \ diff --git a/17-3.5/alpine/initdb-postgis.sh b/17-3.5/alpine/initdb-postgis.sh index e38ad7d66..ae56ee0ba 100644 --- a/17-3.5/alpine/initdb-postgis.sh +++ b/17-3.5/alpine/initdb-postgis.sh @@ -19,7 +19,23 @@ for DB in template_postgis "$POSTGRES_DB"; do -- Reconnect to update pg_setting.resetval -- See https://github.com/postgis/docker-postgis/issues/288 \c - CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; - CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + -- + DO $$ + DECLARE + postgis_major integer; + postgis_minor integer; + BEGIN + SELECT substring(postgis_lib_version() from '^([0-9]+)')::integer, + substring(postgis_lib_version() from '^[0-9]+\.([0-9]+)')::integer + INTO postgis_major, postgis_minor; + + -- Install the legacy tiger geocoder stack only for PostGIS versions before 3.7. + -- fuzzystrmatch is required by postgis_tiger_geocoder, which PostGIS 3.7 and later no longer provide. + IF postgis_major < 3 OR (postgis_major = 3 AND postgis_minor < 7) THEN + CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; + CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + END IF; + END + $$; EOSQL done diff --git a/17-3.5/initdb-postgis.sh b/17-3.5/initdb-postgis.sh index e38ad7d66..ae56ee0ba 100644 --- a/17-3.5/initdb-postgis.sh +++ b/17-3.5/initdb-postgis.sh @@ -19,7 +19,23 @@ for DB in template_postgis "$POSTGRES_DB"; do -- Reconnect to update pg_setting.resetval -- See https://github.com/postgis/docker-postgis/issues/288 \c - CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; - CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + -- + DO $$ + DECLARE + postgis_major integer; + postgis_minor integer; + BEGIN + SELECT substring(postgis_lib_version() from '^([0-9]+)')::integer, + substring(postgis_lib_version() from '^[0-9]+\.([0-9]+)')::integer + INTO postgis_major, postgis_minor; + + -- Install the legacy tiger geocoder stack only for PostGIS versions before 3.7. + -- fuzzystrmatch is required by postgis_tiger_geocoder, which PostGIS 3.7 and later no longer provide. + IF postgis_major < 3 OR (postgis_major = 3 AND postgis_minor < 7) THEN + CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; + CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + END IF; + END + $$; EOSQL done diff --git a/17-3.6/alpine/Dockerfile b/17-3.6/alpine/Dockerfile index 48dde43dc..00741f115 100644 --- a/17-3.6/alpine/Dockerfile +++ b/17-3.6/alpine/Dockerfile @@ -1,17 +1,17 @@ # # NOTE: THIS DOCKERFILE IS GENERATED VIA "make update"! PLEASE DO NOT EDIT IT DIRECTLY. # -ARG BASE_IMAGE=postgres:17-alpine3.22 +ARG BASE_IMAGE=postgres:17-alpine3.23 FROM ${BASE_IMAGE} ARG NPROC= LABEL maintainer="PostGIS Project - https://postgis.net" \ - org.opencontainers.image.description="PostGIS 3.6.2 spatial database extension with PostgreSQL 17 Alpine" \ + org.opencontainers.image.description="PostGIS 3.6.3 spatial database extension with PostgreSQL 17 Alpine" \ org.opencontainers.image.source="https://github.com/postgis/docker-postgis" -ENV POSTGIS_VERSION=3.6.2 -ENV POSTGIS_SHA256=607a4d21c017e5283e15d2d977c9b7f575ddfc672afdee81fc84a2d823db4ba5 +ENV POSTGIS_VERSION=3.6.3 +ENV POSTGIS_SHA256=3ab7714ff1d0f7944855d21546d24e5f7ecf6b931c72472a2bfa30e188a33093 RUN set -eux \ && apk add --no-cache --virtual .fetch-deps \ diff --git a/17-3.6/alpine/initdb-postgis.sh b/17-3.6/alpine/initdb-postgis.sh index e38ad7d66..ae56ee0ba 100644 --- a/17-3.6/alpine/initdb-postgis.sh +++ b/17-3.6/alpine/initdb-postgis.sh @@ -19,7 +19,23 @@ for DB in template_postgis "$POSTGRES_DB"; do -- Reconnect to update pg_setting.resetval -- See https://github.com/postgis/docker-postgis/issues/288 \c - CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; - CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + -- + DO $$ + DECLARE + postgis_major integer; + postgis_minor integer; + BEGIN + SELECT substring(postgis_lib_version() from '^([0-9]+)')::integer, + substring(postgis_lib_version() from '^[0-9]+\.([0-9]+)')::integer + INTO postgis_major, postgis_minor; + + -- Install the legacy tiger geocoder stack only for PostGIS versions before 3.7. + -- fuzzystrmatch is required by postgis_tiger_geocoder, which PostGIS 3.7 and later no longer provide. + IF postgis_major < 3 OR (postgis_major = 3 AND postgis_minor < 7) THEN + CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; + CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + END IF; + END + $$; EOSQL done diff --git a/17-master/Dockerfile b/17-master/Dockerfile index eb7240d08..608179d55 100644 --- a/17-master/Dockerfile +++ b/17-master/Dockerfile @@ -6,14 +6,14 @@ # This is a multi-stage Dockerfile, requiring a minimum Docker version of 17.05. ARG DOCKER_CMAKE_BUILD_TYPE=Release -ARG CGAL_GIT_BRANCH=main +ARG CGAL_GIT_BRANCH=6.1.x-branch ARG NPROC= -FROM docker.io/postgres:17-bullseye as builder +FROM docker.io/postgres:17-trixie AS builder ARG NPROC LABEL maintainer="PostGIS Project - https://postgis.net" \ - org.opencontainers.image.description="PostGIS - master spatial database extension with PostgreSQL 17 bullseye" \ + org.opencontainers.image.description="PostGIS - master spatial database extension with PostgreSQL 17 trixie" \ org.opencontainers.image.source="https://github.com/postgis/docker-postgis" WORKDIR / @@ -23,24 +23,27 @@ RUN set -ex \ && apt-get update \ && apt-get install -y --no-install-recommends \ curl \ - libboost-atomic1.74.0 \ - libboost-chrono1.74.0 \ - libboost-date-time1.74.0 \ - libboost-filesystem1.74.0 \ - libboost-program-options1.74.0 \ - libboost-serialization1.74.0 \ - libboost-system1.74.0 \ - libboost-test1.74.0 \ - libboost-thread1.74.0 \ - libboost-timer1.74.0 \ - libcurl3-gnutls \ + # In Trixie, the libboost-all-dev metapackage currently pulls Boost 1.83 + # development packages, so the runtime Boost packages must come from the + # same series. + libboost-atomic1.83.0 \ + libboost-chrono1.83.0t64 \ + libboost-date-time1.83.0 \ + libboost-filesystem1.83.0 \ + libboost-program-options1.83.0 \ + libboost-serialization1.83.0 \ + libboost-system1.83.0 \ + libboost-test1.83.0 \ + libboost-thread1.83.0 \ + libboost-timer1.83.0 \ + libcurl3t64-gnutls \ libexpat1 \ libgmp10 \ libgmpxx4ldbl \ libjson-c5 \ libmpfr6 \ libprotobuf-c1 \ - libtiff5 \ + libtiff6 \ libxml2 \ sqlite3 \ # build dependency @@ -58,7 +61,7 @@ RUN set -ex \ libgmp-dev \ libjson-c-dev \ libmpfr-dev \ - libpcre3-dev \ + libpcre2-dev \ libpq-dev \ libprotobuf-c-dev \ libsqlite3-dev \ @@ -108,8 +111,8 @@ RUN set -ex \ # cgal & sfcgal ARG CGAL_GIT_BRANCH ENV CGAL_GIT_BRANCH=${CGAL_GIT_BRANCH} -ENV CGAL_GIT_HASH=d4633ca2ab4ed8ffe57c9a5dc12d5588af95c5bd -ENV SFCGAL_GIT_HASH=78a0496bc3f57a698f2d30affbd544be60b44fde +ENV CGAL_GIT_HASH=56da4e64f0eff354437d791da648243af60fb254 +ENV SFCGAL_GIT_HASH=7ebc17553814b2195ab9da9c9dba013203dd5884 RUN set -ex \ && mkdir -p /usr/src \ && cd /usr/src \ @@ -142,7 +145,7 @@ RUN set -ex \ && rm -fr /usr/src/cgal # proj -ENV PROJ_GIT_HASH=55707ca0862d5f2995759a3a1cd8bfec1f6a2ce9 +ENV PROJ_GIT_HASH=75d455c663b41179d9dc02e528d59c107d7ee45e RUN set -ex \ && cd /usr/src \ && git clone https://github.com/OSGeo/PROJ.git \ @@ -172,7 +175,7 @@ RUN set -ex \ && rm -fr /usr/src/PROJ # geos -ENV GEOS_GIT_HASH=a180ae12ad185da32746e665ee068b63b1ac4644 +ENV GEOS_GIT_HASH=243b13831a5e8ddc6c3b80822b09452e22c51243 RUN set -ex \ && cd /usr/src \ && git clone https://github.com/libgeos/geos.git \ @@ -188,7 +191,7 @@ RUN set -ex \ && rm -fr /usr/src/geos # gdal -ENV GDAL_GIT_HASH=859a85835430e594c99d3800ea99cb22eaabc4e9 +ENV GDAL_GIT_HASH=9010a481db4447a160e680067875c31d87ec4cd8 RUN set -ex \ && cd /usr/src \ && git clone https://github.com/OSGeo/gdal.git \ @@ -267,12 +270,12 @@ RUN set -ex \ && ogr2ogr --version \ && proj \ && sfcgal-config --version \ - && pcre-config --version + && pcre2-config --version # ------------------------------------------- # STAGE final # ------------------------------------------- -FROM docker.io/postgres:17-bullseye +FROM docker.io/postgres:17-trixie ARG NPROC ARG DOCKER_CMAKE_BUILD_TYPE @@ -282,37 +285,41 @@ RUN set -ex \ && apt-get update \ && apt-get install -y --no-install-recommends \ curl \ - libboost-atomic1.74.0 \ - libboost-chrono1.74.0 \ - libboost-date-time1.74.0 \ - libboost-filesystem1.74.0 \ - libboost-program-options1.74.0 \ - libboost-serialization1.74.0 \ - libboost-system1.74.0 \ - libboost-test1.74.0 \ - libboost-thread1.74.0 \ - libboost-timer1.74.0 \ - libcurl3-gnutls \ + # In Trixie, the libboost-all-dev metapackage currently pulls Boost 1.83 + # development packages, so the runtime Boost packages must come from the + # same series. + libboost-atomic1.83.0 \ + libboost-chrono1.83.0t64 \ + libboost-date-time1.83.0 \ + libboost-filesystem1.83.0 \ + libboost-program-options1.83.0 \ + libboost-serialization1.83.0 \ + libboost-system1.83.0 \ + libboost-test1.83.0 \ + libboost-thread1.83.0 \ + libboost-timer1.83.0 \ + libcurl3t64-gnutls \ libexpat1 \ libgmp10 \ libgmpxx4ldbl \ libjson-c5 \ libmpfr6 \ - libpcre3 \ + libpcre2-8-0 \ + libpcre2-posix3 \ libprotobuf-c1 \ - libtiff5 \ + libtiff6 \ libxml2 \ sqlite3 \ # gdal+ libblosc1 \ - libcfitsio9 \ + libcfitsio10t64 \ libfreexl1 \ - libfyba0 \ + libfyba0t64 \ libgomp1 \ - libhdf5-103-1 \ - libkmlbase1 \ - libkmldom1 \ - libkmlengine1 \ + libhdf5-310 \ + libkmlbase1t64 \ + libkmldom1t64 \ + libkmlengine1t64 \ libopenjp2-7 \ libqhull-r8.0 \ && apt-get clean \ @@ -323,11 +330,11 @@ COPY --from=builder /usr/local /usr/local ARG CGAL_GIT_BRANCH ENV CGAL_GIT_BRANCH=${CGAL_GIT_BRANCH} -ENV CGAL_GIT_HASH=d4633ca2ab4ed8ffe57c9a5dc12d5588af95c5bd -ENV SFCGAL_GIT_HASH=78a0496bc3f57a698f2d30affbd544be60b44fde -ENV PROJ_GIT_HASH=55707ca0862d5f2995759a3a1cd8bfec1f6a2ce9 -ENV GEOS_GIT_HASH=a180ae12ad185da32746e665ee068b63b1ac4644 -ENV GDAL_GIT_HASH=859a85835430e594c99d3800ea99cb22eaabc4e9 +ENV CGAL_GIT_HASH=56da4e64f0eff354437d791da648243af60fb254 +ENV SFCGAL_GIT_HASH=7ebc17553814b2195ab9da9c9dba013203dd5884 +ENV PROJ_GIT_HASH=75d455c663b41179d9dc02e528d59c107d7ee45e +ENV GEOS_GIT_HASH=243b13831a5e8ddc6c3b80822b09452e22c51243 +ENV GDAL_GIT_HASH=9010a481db4447a160e680067875c31d87ec4cd8 # Minimal command line test ( fail fast ) RUN set -ex \ @@ -346,7 +353,9 @@ RUN set -ex \ || echo "ogr2ogr missing PostgreSQL driver" && exit 1 # install postgis -ENV POSTGIS_GIT_HASH=6d729904766367e513963cbb330b58400d12025c +ENV POSTGIS_GIT_HASH=e1524ad9145af2dedf45391a581a8f48436817b7 +ENV H3_PG_GIT_HASH=e5e46ebcd6e07177a35befd45751d52d42d28655 +ENV ADDRESS_STANDARDIZER_GIT_HASH=a26f8ef47219a414c8d4e8b8908b09c24b60deeb RUN set -ex \ && apt-get update \ @@ -368,7 +377,7 @@ RUN set -ex \ libgmp-dev \ libjson-c-dev \ libmpfr-dev \ - libpcre3-dev \ + libpcre2-dev \ libprotobuf-c-dev \ libsqlite3-dev \ libtiff-dev \ @@ -394,6 +403,29 @@ RUN set -ex \ --enable-lto \ && make -j${NPROC:-$(nproc)} \ && make install \ + # h3-pg from the latest main branch revision. + && cd /usr/src/ \ + && git clone https://github.com/postgis/h3-pg.git \ + && cd h3-pg \ + && git checkout ${H3_PG_GIT_HASH} \ + && git log -1 > /_pgis_h3_pg_last_commit.txt \ + && cmake -B build -DCMAKE_BUILD_TYPE=${DOCKER_CMAKE_BUILD_TYPE} -DBUILD_TESTING=ON \ + && cmake --build build -j${NPROC:-$(nproc)} \ + && cmake --install build --component h3-pg \ + && chown -R postgres:postgres build \ + # Skip the full h3_postgis_regress suite because tile_coverage is slow and flaky + && if ! su postgres -c "ctest --test-dir /usr/src/h3-pg/build --output-on-failure -R '^(h3_regress|h3_inlined|h3_postgis_regress_fast)$'"; then \ + find /usr/src/h3-pg/build \( -path '*/test/log/*' -o -name 'regression.diffs' -o -name 'regression.out' -o -name 'regression.log' -o -name 'LastTest.log' \) -type f -print -exec sh -c 'echo "===== $1 ====="; cat "$1"' sh {} \; ; \ + exit 1; \ + fi \ + # address_standardizer from the latest main branch revision. + && cd /usr/src/ \ + && git clone https://github.com/postgis/address_standardizer.git \ + && cd address_standardizer \ + && git checkout ${ADDRESS_STANDARDIZER_GIT_HASH} \ + && git log -1 > /_pgis_address_standardizer_last_commit.txt \ + && make PG_CONFIG=/usr/lib/postgresql/$PG_MAJOR/bin/pg_config PG_CFLAGS=-Werror with_llvm=no \ + && make PG_CONFIG=/usr/lib/postgresql/$PG_MAJOR/bin/pg_config PG_CFLAGS=-Werror with_llvm=no install \ # refresh proj data - workarounds: https://trac.osgeo.org/postgis/ticket/5316 && projsync --system-directory --file ch_swisstopo_CHENyx06_ETRS \ && projsync --system-directory --file us_noaa_eshpgn \ @@ -405,17 +437,24 @@ RUN set -ex \ && su postgres -c 'pg_ctl -D /tempdb init' \ && su postgres -c 'pg_ctl -D /tempdb -c -l /tmp/logfile -o '-F' start ' \ && ldconfig \ - && cd regress \ + && cd /usr/src/address_standardizer \ + && if ! PGUSER=postgres make PG_CONFIG=/usr/lib/postgresql/$PG_MAJOR/bin/pg_config installcheck; then \ + if [ -f test/regression.diffs ]; then cat test/regression.diffs; fi; \ + exit 1; \ + fi \ + && cd /usr/src/postgis/regress \ && make -j${NPROC:-$(nproc)} check RUNTESTFLAGS="--extension --verbose" PGUSER=postgres \ \ && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS postgis;"' \ && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS postgis_raster;"' \ && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS postgis_sfcgal;"' \ && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; --needed for postgis_tiger_geocoder "' \ - && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS address_standardizer;"' \ - && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS address_standardizer_data_us;"' \ - && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder;"' \ + # Some optional extensions may be absent from current PostGIS master builds. + # See: https://lists.osgeo.org/pipermail/postgis-devel/2026-February/030730.html + && su postgres -c "psql -v ON_ERROR_STOP=1 -c \"DO \\\$\\\$ DECLARE extension_name text; BEGIN FOREACH extension_name IN ARRAY ARRAY['address_standardizer', 'address_standardizer_data_us', 'postgis_tiger_geocoder'] LOOP IF EXISTS (SELECT 1 FROM pg_available_extensions WHERE name = extension_name) THEN EXECUTE format('CREATE EXTENSION IF NOT EXISTS %I', extension_name); ELSE RAISE NOTICE 'Extension % is not available, skipping', extension_name; END IF; END LOOP; END \\\$\\\$;\"" \ && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS postgis_topology;"' \ + && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS h3;"' \ + && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS h3_postgis;"' \ && su postgres -c 'psql -t -c "SELECT version();"' >> /_pgis_full_version.txt \ && su postgres -c 'psql -t -c "SELECT PostGIS_Full_Version();"' >> /_pgis_full_version.txt \ && su postgres -c 'psql -t -c "\dx"' >> /_pgis_full_version.txt \ @@ -427,6 +466,8 @@ RUN set -ex \ # clean && cd / \ && rm -rf /usr/src/postgis \ + && rm -rf /usr/src/h3-pg \ + && rm -rf /usr/src/address_standardizer \ && apt-get purge -y --autoremove \ autoconf \ automake \ @@ -443,7 +484,7 @@ RUN set -ex \ libgmp-dev \ libjson-c-dev \ libmpfr-dev \ - libpcre3-dev \ + libpcre2-dev \ libprotobuf-c-dev \ libsqlite3-dev \ libtiff-dev \ diff --git a/17-master/initdb-postgis.sh b/17-master/initdb-postgis.sh index e38ad7d66..ae56ee0ba 100644 --- a/17-master/initdb-postgis.sh +++ b/17-master/initdb-postgis.sh @@ -19,7 +19,23 @@ for DB in template_postgis "$POSTGRES_DB"; do -- Reconnect to update pg_setting.resetval -- See https://github.com/postgis/docker-postgis/issues/288 \c - CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; - CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + -- + DO $$ + DECLARE + postgis_major integer; + postgis_minor integer; + BEGIN + SELECT substring(postgis_lib_version() from '^([0-9]+)')::integer, + substring(postgis_lib_version() from '^[0-9]+\.([0-9]+)')::integer + INTO postgis_major, postgis_minor; + + -- Install the legacy tiger geocoder stack only for PostGIS versions before 3.7. + -- fuzzystrmatch is required by postgis_tiger_geocoder, which PostGIS 3.7 and later no longer provide. + IF postgis_major < 3 OR (postgis_major = 3 AND postgis_minor < 7) THEN + CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; + CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + END IF; + END + $$; EOSQL done diff --git a/18-3.6/Dockerfile b/18-3.6/Dockerfile index 10d81deb7..423e6f8b0 100644 --- a/18-3.6/Dockerfile +++ b/18-3.6/Dockerfile @@ -5,11 +5,11 @@ FROM docker.io/postgres:18-trixie LABEL maintainer="PostGIS Project - https://postgis.net" \ - org.opencontainers.image.description="PostGIS 3.6.2+dfsg-1.pgdg13+1 spatial database extension with PostgreSQL 18 trixie" \ + org.opencontainers.image.description="PostGIS 3.6.3+dfsg-1.pgdg13+1 spatial database extension with PostgreSQL 18 trixie" \ org.opencontainers.image.source="https://github.com/postgis/docker-postgis" ENV POSTGIS_MAJOR=3 -ENV POSTGIS_VERSION=3.6.2+dfsg-1.pgdg13+1 +ENV POSTGIS_VERSION=3.6.3+dfsg-1.pgdg13+1 RUN apt-get update \ && apt-cache showpkg postgresql-$PG_MAJOR-postgis-$POSTGIS_MAJOR \ diff --git a/18-3.6/alpine/Dockerfile b/18-3.6/alpine/Dockerfile index deae1c356..119070ce3 100644 --- a/18-3.6/alpine/Dockerfile +++ b/18-3.6/alpine/Dockerfile @@ -1,17 +1,17 @@ # # NOTE: THIS DOCKERFILE IS GENERATED VIA "make update"! PLEASE DO NOT EDIT IT DIRECTLY. # -ARG BASE_IMAGE=postgres:18-alpine3.22 +ARG BASE_IMAGE=postgres:18-alpine3.23 FROM ${BASE_IMAGE} ARG NPROC= LABEL maintainer="PostGIS Project - https://postgis.net" \ - org.opencontainers.image.description="PostGIS 3.6.2 spatial database extension with PostgreSQL 18 Alpine" \ + org.opencontainers.image.description="PostGIS 3.6.3 spatial database extension with PostgreSQL 18 Alpine" \ org.opencontainers.image.source="https://github.com/postgis/docker-postgis" -ENV POSTGIS_VERSION=3.6.2 -ENV POSTGIS_SHA256=607a4d21c017e5283e15d2d977c9b7f575ddfc672afdee81fc84a2d823db4ba5 +ENV POSTGIS_VERSION=3.6.3 +ENV POSTGIS_SHA256=3ab7714ff1d0f7944855d21546d24e5f7ecf6b931c72472a2bfa30e188a33093 RUN set -eux \ && apk add --no-cache --virtual .fetch-deps \ diff --git a/18-3.6/alpine/initdb-postgis.sh b/18-3.6/alpine/initdb-postgis.sh index e38ad7d66..ae56ee0ba 100644 --- a/18-3.6/alpine/initdb-postgis.sh +++ b/18-3.6/alpine/initdb-postgis.sh @@ -19,7 +19,23 @@ for DB in template_postgis "$POSTGRES_DB"; do -- Reconnect to update pg_setting.resetval -- See https://github.com/postgis/docker-postgis/issues/288 \c - CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; - CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + -- + DO $$ + DECLARE + postgis_major integer; + postgis_minor integer; + BEGIN + SELECT substring(postgis_lib_version() from '^([0-9]+)')::integer, + substring(postgis_lib_version() from '^[0-9]+\.([0-9]+)')::integer + INTO postgis_major, postgis_minor; + + -- Install the legacy tiger geocoder stack only for PostGIS versions before 3.7. + -- fuzzystrmatch is required by postgis_tiger_geocoder, which PostGIS 3.7 and later no longer provide. + IF postgis_major < 3 OR (postgis_major = 3 AND postgis_minor < 7) THEN + CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; + CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + END IF; + END + $$; EOSQL done diff --git a/18-3.6/initdb-postgis.sh b/18-3.6/initdb-postgis.sh index e38ad7d66..ae56ee0ba 100644 --- a/18-3.6/initdb-postgis.sh +++ b/18-3.6/initdb-postgis.sh @@ -19,7 +19,23 @@ for DB in template_postgis "$POSTGRES_DB"; do -- Reconnect to update pg_setting.resetval -- See https://github.com/postgis/docker-postgis/issues/288 \c - CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; - CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + -- + DO $$ + DECLARE + postgis_major integer; + postgis_minor integer; + BEGIN + SELECT substring(postgis_lib_version() from '^([0-9]+)')::integer, + substring(postgis_lib_version() from '^[0-9]+\.([0-9]+)')::integer + INTO postgis_major, postgis_minor; + + -- Install the legacy tiger geocoder stack only for PostGIS versions before 3.7. + -- fuzzystrmatch is required by postgis_tiger_geocoder, which PostGIS 3.7 and later no longer provide. + IF postgis_major < 3 OR (postgis_major = 3 AND postgis_minor < 7) THEN + CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; + CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + END IF; + END + $$; EOSQL done diff --git a/16-master/Dockerfile b/18-master/Dockerfile similarity index 72% rename from 16-master/Dockerfile rename to 18-master/Dockerfile index fcf0b8b11..3f8baa5f8 100644 --- a/16-master/Dockerfile +++ b/18-master/Dockerfile @@ -6,14 +6,14 @@ # This is a multi-stage Dockerfile, requiring a minimum Docker version of 17.05. ARG DOCKER_CMAKE_BUILD_TYPE=Release -ARG CGAL_GIT_BRANCH=main +ARG CGAL_GIT_BRANCH=6.1.x-branch ARG NPROC= -FROM docker.io/postgres:16-bullseye as builder +FROM docker.io/postgres:18-trixie AS builder ARG NPROC LABEL maintainer="PostGIS Project - https://postgis.net" \ - org.opencontainers.image.description="PostGIS - master spatial database extension with PostgreSQL 16 bullseye" \ + org.opencontainers.image.description="PostGIS - master spatial database extension with PostgreSQL 18 trixie" \ org.opencontainers.image.source="https://github.com/postgis/docker-postgis" WORKDIR / @@ -23,24 +23,27 @@ RUN set -ex \ && apt-get update \ && apt-get install -y --no-install-recommends \ curl \ - libboost-atomic1.74.0 \ - libboost-chrono1.74.0 \ - libboost-date-time1.74.0 \ - libboost-filesystem1.74.0 \ - libboost-program-options1.74.0 \ - libboost-serialization1.74.0 \ - libboost-system1.74.0 \ - libboost-test1.74.0 \ - libboost-thread1.74.0 \ - libboost-timer1.74.0 \ - libcurl3-gnutls \ + # In Trixie, the libboost-all-dev metapackage currently pulls Boost 1.83 + # development packages, so the runtime Boost packages must come from the + # same series. + libboost-atomic1.83.0 \ + libboost-chrono1.83.0t64 \ + libboost-date-time1.83.0 \ + libboost-filesystem1.83.0 \ + libboost-program-options1.83.0 \ + libboost-serialization1.83.0 \ + libboost-system1.83.0 \ + libboost-test1.83.0 \ + libboost-thread1.83.0 \ + libboost-timer1.83.0 \ + libcurl3t64-gnutls \ libexpat1 \ libgmp10 \ libgmpxx4ldbl \ libjson-c5 \ libmpfr6 \ libprotobuf-c1 \ - libtiff5 \ + libtiff6 \ libxml2 \ sqlite3 \ # build dependency @@ -58,7 +61,7 @@ RUN set -ex \ libgmp-dev \ libjson-c-dev \ libmpfr-dev \ - libpcre3-dev \ + libpcre2-dev \ libpq-dev \ libprotobuf-c-dev \ libsqlite3-dev \ @@ -108,8 +111,8 @@ RUN set -ex \ # cgal & sfcgal ARG CGAL_GIT_BRANCH ENV CGAL_GIT_BRANCH=${CGAL_GIT_BRANCH} -ENV CGAL_GIT_HASH=d4633ca2ab4ed8ffe57c9a5dc12d5588af95c5bd -ENV SFCGAL_GIT_HASH=78a0496bc3f57a698f2d30affbd544be60b44fde +ENV CGAL_GIT_HASH=56da4e64f0eff354437d791da648243af60fb254 +ENV SFCGAL_GIT_HASH=7ebc17553814b2195ab9da9c9dba013203dd5884 RUN set -ex \ && mkdir -p /usr/src \ && cd /usr/src \ @@ -142,7 +145,7 @@ RUN set -ex \ && rm -fr /usr/src/cgal # proj -ENV PROJ_GIT_HASH=55707ca0862d5f2995759a3a1cd8bfec1f6a2ce9 +ENV PROJ_GIT_HASH=75d455c663b41179d9dc02e528d59c107d7ee45e RUN set -ex \ && cd /usr/src \ && git clone https://github.com/OSGeo/PROJ.git \ @@ -172,7 +175,7 @@ RUN set -ex \ && rm -fr /usr/src/PROJ # geos -ENV GEOS_GIT_HASH=a180ae12ad185da32746e665ee068b63b1ac4644 +ENV GEOS_GIT_HASH=243b13831a5e8ddc6c3b80822b09452e22c51243 RUN set -ex \ && cd /usr/src \ && git clone https://github.com/libgeos/geos.git \ @@ -188,7 +191,7 @@ RUN set -ex \ && rm -fr /usr/src/geos # gdal -ENV GDAL_GIT_HASH=859a85835430e594c99d3800ea99cb22eaabc4e9 +ENV GDAL_GIT_HASH=9010a481db4447a160e680067875c31d87ec4cd8 RUN set -ex \ && cd /usr/src \ && git clone https://github.com/OSGeo/gdal.git \ @@ -267,12 +270,12 @@ RUN set -ex \ && ogr2ogr --version \ && proj \ && sfcgal-config --version \ - && pcre-config --version + && pcre2-config --version # ------------------------------------------- # STAGE final # ------------------------------------------- -FROM docker.io/postgres:16-bullseye +FROM docker.io/postgres:18-trixie ARG NPROC ARG DOCKER_CMAKE_BUILD_TYPE @@ -282,37 +285,41 @@ RUN set -ex \ && apt-get update \ && apt-get install -y --no-install-recommends \ curl \ - libboost-atomic1.74.0 \ - libboost-chrono1.74.0 \ - libboost-date-time1.74.0 \ - libboost-filesystem1.74.0 \ - libboost-program-options1.74.0 \ - libboost-serialization1.74.0 \ - libboost-system1.74.0 \ - libboost-test1.74.0 \ - libboost-thread1.74.0 \ - libboost-timer1.74.0 \ - libcurl3-gnutls \ + # In Trixie, the libboost-all-dev metapackage currently pulls Boost 1.83 + # development packages, so the runtime Boost packages must come from the + # same series. + libboost-atomic1.83.0 \ + libboost-chrono1.83.0t64 \ + libboost-date-time1.83.0 \ + libboost-filesystem1.83.0 \ + libboost-program-options1.83.0 \ + libboost-serialization1.83.0 \ + libboost-system1.83.0 \ + libboost-test1.83.0 \ + libboost-thread1.83.0 \ + libboost-timer1.83.0 \ + libcurl3t64-gnutls \ libexpat1 \ libgmp10 \ libgmpxx4ldbl \ libjson-c5 \ libmpfr6 \ - libpcre3 \ + libpcre2-8-0 \ + libpcre2-posix3 \ libprotobuf-c1 \ - libtiff5 \ + libtiff6 \ libxml2 \ sqlite3 \ # gdal+ libblosc1 \ - libcfitsio9 \ + libcfitsio10t64 \ libfreexl1 \ - libfyba0 \ + libfyba0t64 \ libgomp1 \ - libhdf5-103-1 \ - libkmlbase1 \ - libkmldom1 \ - libkmlengine1 \ + libhdf5-310 \ + libkmlbase1t64 \ + libkmldom1t64 \ + libkmlengine1t64 \ libopenjp2-7 \ libqhull-r8.0 \ && apt-get clean \ @@ -323,11 +330,11 @@ COPY --from=builder /usr/local /usr/local ARG CGAL_GIT_BRANCH ENV CGAL_GIT_BRANCH=${CGAL_GIT_BRANCH} -ENV CGAL_GIT_HASH=d4633ca2ab4ed8ffe57c9a5dc12d5588af95c5bd -ENV SFCGAL_GIT_HASH=78a0496bc3f57a698f2d30affbd544be60b44fde -ENV PROJ_GIT_HASH=55707ca0862d5f2995759a3a1cd8bfec1f6a2ce9 -ENV GEOS_GIT_HASH=a180ae12ad185da32746e665ee068b63b1ac4644 -ENV GDAL_GIT_HASH=859a85835430e594c99d3800ea99cb22eaabc4e9 +ENV CGAL_GIT_HASH=56da4e64f0eff354437d791da648243af60fb254 +ENV SFCGAL_GIT_HASH=7ebc17553814b2195ab9da9c9dba013203dd5884 +ENV PROJ_GIT_HASH=75d455c663b41179d9dc02e528d59c107d7ee45e +ENV GEOS_GIT_HASH=243b13831a5e8ddc6c3b80822b09452e22c51243 +ENV GDAL_GIT_HASH=9010a481db4447a160e680067875c31d87ec4cd8 # Minimal command line test ( fail fast ) RUN set -ex \ @@ -346,7 +353,9 @@ RUN set -ex \ || echo "ogr2ogr missing PostgreSQL driver" && exit 1 # install postgis -ENV POSTGIS_GIT_HASH=6d729904766367e513963cbb330b58400d12025c +ENV POSTGIS_GIT_HASH=e1524ad9145af2dedf45391a581a8f48436817b7 +ENV H3_PG_GIT_HASH=e5e46ebcd6e07177a35befd45751d52d42d28655 +ENV ADDRESS_STANDARDIZER_GIT_HASH=a26f8ef47219a414c8d4e8b8908b09c24b60deeb RUN set -ex \ && apt-get update \ @@ -368,7 +377,7 @@ RUN set -ex \ libgmp-dev \ libjson-c-dev \ libmpfr-dev \ - libpcre3-dev \ + libpcre2-dev \ libprotobuf-c-dev \ libsqlite3-dev \ libtiff-dev \ @@ -394,6 +403,29 @@ RUN set -ex \ --enable-lto \ && make -j${NPROC:-$(nproc)} \ && make install \ + # h3-pg from the latest main branch revision. + && cd /usr/src/ \ + && git clone https://github.com/postgis/h3-pg.git \ + && cd h3-pg \ + && git checkout ${H3_PG_GIT_HASH} \ + && git log -1 > /_pgis_h3_pg_last_commit.txt \ + && cmake -B build -DCMAKE_BUILD_TYPE=${DOCKER_CMAKE_BUILD_TYPE} -DBUILD_TESTING=ON \ + && cmake --build build -j${NPROC:-$(nproc)} \ + && cmake --install build --component h3-pg \ + && chown -R postgres:postgres build \ + # Skip the full h3_postgis_regress suite because tile_coverage is slow and flaky + && if ! su postgres -c "ctest --test-dir /usr/src/h3-pg/build --output-on-failure -R '^(h3_regress|h3_inlined|h3_postgis_regress_fast)$'"; then \ + find /usr/src/h3-pg/build \( -path '*/test/log/*' -o -name 'regression.diffs' -o -name 'regression.out' -o -name 'regression.log' -o -name 'LastTest.log' \) -type f -print -exec sh -c 'echo "===== $1 ====="; cat "$1"' sh {} \; ; \ + exit 1; \ + fi \ + # address_standardizer from the latest main branch revision. + && cd /usr/src/ \ + && git clone https://github.com/postgis/address_standardizer.git \ + && cd address_standardizer \ + && git checkout ${ADDRESS_STANDARDIZER_GIT_HASH} \ + && git log -1 > /_pgis_address_standardizer_last_commit.txt \ + && make PG_CONFIG=/usr/lib/postgresql/$PG_MAJOR/bin/pg_config PG_CFLAGS=-Werror with_llvm=no \ + && make PG_CONFIG=/usr/lib/postgresql/$PG_MAJOR/bin/pg_config PG_CFLAGS=-Werror with_llvm=no install \ # refresh proj data - workarounds: https://trac.osgeo.org/postgis/ticket/5316 && projsync --system-directory --file ch_swisstopo_CHENyx06_ETRS \ && projsync --system-directory --file us_noaa_eshpgn \ @@ -405,17 +437,24 @@ RUN set -ex \ && su postgres -c 'pg_ctl -D /tempdb init' \ && su postgres -c 'pg_ctl -D /tempdb -c -l /tmp/logfile -o '-F' start ' \ && ldconfig \ - && cd regress \ + && cd /usr/src/address_standardizer \ + && if ! PGUSER=postgres make PG_CONFIG=/usr/lib/postgresql/$PG_MAJOR/bin/pg_config installcheck; then \ + if [ -f test/regression.diffs ]; then cat test/regression.diffs; fi; \ + exit 1; \ + fi \ + && cd /usr/src/postgis/regress \ && make -j${NPROC:-$(nproc)} check RUNTESTFLAGS="--extension --verbose" PGUSER=postgres \ \ && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS postgis;"' \ && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS postgis_raster;"' \ && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS postgis_sfcgal;"' \ && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; --needed for postgis_tiger_geocoder "' \ - && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS address_standardizer;"' \ - && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS address_standardizer_data_us;"' \ - && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder;"' \ + # Some optional extensions may be absent from current PostGIS master builds. + # See: https://lists.osgeo.org/pipermail/postgis-devel/2026-February/030730.html + && su postgres -c "psql -v ON_ERROR_STOP=1 -c \"DO \\\$\\\$ DECLARE extension_name text; BEGIN FOREACH extension_name IN ARRAY ARRAY['address_standardizer', 'address_standardizer_data_us', 'postgis_tiger_geocoder'] LOOP IF EXISTS (SELECT 1 FROM pg_available_extensions WHERE name = extension_name) THEN EXECUTE format('CREATE EXTENSION IF NOT EXISTS %I', extension_name); ELSE RAISE NOTICE 'Extension % is not available, skipping', extension_name; END IF; END LOOP; END \\\$\\\$;\"" \ && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS postgis_topology;"' \ + && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS h3;"' \ + && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS h3_postgis;"' \ && su postgres -c 'psql -t -c "SELECT version();"' >> /_pgis_full_version.txt \ && su postgres -c 'psql -t -c "SELECT PostGIS_Full_Version();"' >> /_pgis_full_version.txt \ && su postgres -c 'psql -t -c "\dx"' >> /_pgis_full_version.txt \ @@ -427,6 +466,8 @@ RUN set -ex \ # clean && cd / \ && rm -rf /usr/src/postgis \ + && rm -rf /usr/src/h3-pg \ + && rm -rf /usr/src/address_standardizer \ && apt-get purge -y --autoremove \ autoconf \ automake \ @@ -443,7 +484,7 @@ RUN set -ex \ libgmp-dev \ libjson-c-dev \ libmpfr-dev \ - libpcre3-dev \ + libpcre2-dev \ libprotobuf-c-dev \ libsqlite3-dev \ libtiff-dev \ diff --git a/18-master/initdb-postgis.sh b/18-master/initdb-postgis.sh new file mode 100644 index 000000000..ae56ee0ba --- /dev/null +++ b/18-master/initdb-postgis.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +set -e + +# Perform all actions as $POSTGRES_USER +export PGUSER="$POSTGRES_USER" + +# Create the 'template_postgis' template db +"${psql[@]}" <<- 'EOSQL' +CREATE DATABASE template_postgis IS_TEMPLATE true; +EOSQL + +# Load PostGIS into both template_database and $POSTGRES_DB +for DB in template_postgis "$POSTGRES_DB"; do + echo "Loading PostGIS extensions into $DB" + "${psql[@]}" --dbname="$DB" <<-'EOSQL' + CREATE EXTENSION IF NOT EXISTS postgis; + CREATE EXTENSION IF NOT EXISTS postgis_topology; + -- Reconnect to update pg_setting.resetval + -- See https://github.com/postgis/docker-postgis/issues/288 + \c + -- + DO $$ + DECLARE + postgis_major integer; + postgis_minor integer; + BEGIN + SELECT substring(postgis_lib_version() from '^([0-9]+)')::integer, + substring(postgis_lib_version() from '^[0-9]+\.([0-9]+)')::integer + INTO postgis_major, postgis_minor; + + -- Install the legacy tiger geocoder stack only for PostGIS versions before 3.7. + -- fuzzystrmatch is required by postgis_tiger_geocoder, which PostGIS 3.7 and later no longer provide. + IF postgis_major < 3 OR (postgis_major = 3 AND postgis_minor < 7) THEN + CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; + CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + END IF; + END + $$; +EOSQL +done diff --git a/13-3.5/alpine/update-postgis.sh b/18-master/update-postgis.sh similarity index 100% rename from 13-3.5/alpine/update-postgis.sh rename to 18-master/update-postgis.sh diff --git a/Dockerfile.alpine.template b/Dockerfile.alpine.template index 839e37038..478b85814 100644 --- a/Dockerfile.alpine.template +++ b/Dockerfile.alpine.template @@ -1,7 +1,7 @@ # # %%TXT_AUTOGENERATED%% # -ARG BASE_IMAGE=postgres:%%PG_MAJOR%%-alpine3.22 +ARG BASE_IMAGE=postgres:%%PG_MAJOR%%-alpine3.23 FROM ${BASE_IMAGE} ARG NPROC= diff --git a/Dockerfile.master.template b/Dockerfile.master.template index defb78549..6a8e64bcd 100644 --- a/Dockerfile.master.template +++ b/Dockerfile.master.template @@ -6,9 +6,9 @@ # This is a multi-stage Dockerfile, requiring a minimum Docker version of 17.05. ARG DOCKER_CMAKE_BUILD_TYPE=Release -ARG CGAL_GIT_BRANCH=main +ARG CGAL_GIT_BRANCH=%%CGAL_GIT_BRANCH%% ARG NPROC= -FROM docker.io/postgres:%%PG_MAJOR%%-%%DEBIAN_VERSION%% as builder +FROM docker.io/postgres:%%PG_MAJOR%%-%%DEBIAN_VERSION%% AS builder ARG NPROC @@ -23,8 +23,11 @@ RUN set -ex \ && apt-get update \ && apt-get install -y --no-install-recommends \ curl \ + # In Trixie, the libboost-all-dev metapackage currently pulls Boost 1.83 + # development packages, so the runtime Boost packages must come from the + # same series. libboost-atomic%%BOOST_VERSION%% \ - libboost-chrono%%BOOST_VERSION%% \ + libboost-chrono%%BOOST_CHRONO_VERSION%% \ libboost-date-time%%BOOST_VERSION%% \ libboost-filesystem%%BOOST_VERSION%% \ libboost-program-options%%BOOST_VERSION%% \ @@ -33,14 +36,14 @@ RUN set -ex \ libboost-test%%BOOST_VERSION%% \ libboost-thread%%BOOST_VERSION%% \ libboost-timer%%BOOST_VERSION%% \ - libcurl3-gnutls \ + libcurl3t64-gnutls \ libexpat1 \ libgmp10 \ libgmpxx4ldbl \ libjson-c5 \ libmpfr6 \ libprotobuf-c1 \ - libtiff5 \ + libtiff6 \ libxml2 \ sqlite3 \ # build dependency @@ -58,7 +61,7 @@ RUN set -ex \ libgmp-dev \ libjson-c-dev \ libmpfr-dev \ - libpcre3-dev \ + libpcre2-dev \ libpq-dev \ libprotobuf-c-dev \ libsqlite3-dev \ @@ -267,7 +270,7 @@ RUN set -ex \ && ogr2ogr --version \ && proj \ && sfcgal-config --version \ - && pcre-config --version + && pcre2-config --version # ------------------------------------------- # STAGE final @@ -282,8 +285,11 @@ RUN set -ex \ && apt-get update \ && apt-get install -y --no-install-recommends \ curl \ + # In Trixie, the libboost-all-dev metapackage currently pulls Boost 1.83 + # development packages, so the runtime Boost packages must come from the + # same series. libboost-atomic%%BOOST_VERSION%% \ - libboost-chrono%%BOOST_VERSION%% \ + libboost-chrono%%BOOST_CHRONO_VERSION%% \ libboost-date-time%%BOOST_VERSION%% \ libboost-filesystem%%BOOST_VERSION%% \ libboost-program-options%%BOOST_VERSION%% \ @@ -292,27 +298,28 @@ RUN set -ex \ libboost-test%%BOOST_VERSION%% \ libboost-thread%%BOOST_VERSION%% \ libboost-timer%%BOOST_VERSION%% \ - libcurl3-gnutls \ + libcurl3t64-gnutls \ libexpat1 \ libgmp10 \ libgmpxx4ldbl \ libjson-c5 \ libmpfr6 \ - libpcre3 \ + libpcre2-8-0 \ + libpcre2-posix3 \ libprotobuf-c1 \ - libtiff5 \ + libtiff6 \ libxml2 \ sqlite3 \ # gdal+ libblosc1 \ - libcfitsio9 \ + libcfitsio10t64 \ libfreexl1 \ - libfyba0 \ + libfyba0t64 \ libgomp1 \ - libhdf5-103-1 \ - libkmlbase1 \ - libkmldom1 \ - libkmlengine1 \ + libhdf5-310 \ + libkmlbase1t64 \ + libkmldom1t64 \ + libkmlengine1t64 \ libopenjp2-7 \ libqhull-r8.0 \ && apt-get clean \ @@ -347,6 +354,8 @@ RUN set -ex \ # install postgis ENV POSTGIS_GIT_HASH=%%POSTGIS_GIT_HASH%% +ENV H3_PG_GIT_HASH=%%H3_PG_GIT_HASH%% +ENV ADDRESS_STANDARDIZER_GIT_HASH=%%ADDRESS_STANDARDIZER_GIT_HASH%% RUN set -ex \ && apt-get update \ @@ -368,7 +377,7 @@ RUN set -ex \ libgmp-dev \ libjson-c-dev \ libmpfr-dev \ - libpcre3-dev \ + libpcre2-dev \ libprotobuf-c-dev \ libsqlite3-dev \ libtiff-dev \ @@ -394,6 +403,29 @@ RUN set -ex \ --enable-lto \ && make -j${NPROC:-$(nproc)} \ && make install \ + # h3-pg from the latest main branch revision. + && cd /usr/src/ \ + && git clone https://github.com/postgis/h3-pg.git \ + && cd h3-pg \ + && git checkout ${H3_PG_GIT_HASH} \ + && git log -1 > /_pgis_h3_pg_last_commit.txt \ + && cmake -B build -DCMAKE_BUILD_TYPE=${DOCKER_CMAKE_BUILD_TYPE} -DBUILD_TESTING=ON \ + && cmake --build build -j${NPROC:-$(nproc)} \ + && cmake --install build --component h3-pg \ + && chown -R postgres:postgres build \ + # Skip the full h3_postgis_regress suite because tile_coverage is slow and flaky + && if ! su postgres -c "ctest --test-dir /usr/src/h3-pg/build --output-on-failure -R '^(h3_regress|h3_inlined|h3_postgis_regress_fast)$'"; then \ + find /usr/src/h3-pg/build \( -path '*/test/log/*' -o -name 'regression.diffs' -o -name 'regression.out' -o -name 'regression.log' -o -name 'LastTest.log' \) -type f -print -exec sh -c 'echo "===== $1 ====="; cat "$1"' sh {} \; ; \ + exit 1; \ + fi \ + # address_standardizer from the latest main branch revision. + && cd /usr/src/ \ + && git clone https://github.com/postgis/address_standardizer.git \ + && cd address_standardizer \ + && git checkout ${ADDRESS_STANDARDIZER_GIT_HASH} \ + && git log -1 > /_pgis_address_standardizer_last_commit.txt \ + && make PG_CONFIG=/usr/lib/postgresql/$PG_MAJOR/bin/pg_config PG_CFLAGS=-Werror with_llvm=no \ + && make PG_CONFIG=/usr/lib/postgresql/$PG_MAJOR/bin/pg_config PG_CFLAGS=-Werror with_llvm=no install \ # refresh proj data - workarounds: https://trac.osgeo.org/postgis/ticket/5316 && projsync --system-directory --file ch_swisstopo_CHENyx06_ETRS \ && projsync --system-directory --file us_noaa_eshpgn \ @@ -405,17 +437,24 @@ RUN set -ex \ && su postgres -c 'pg_ctl -D /tempdb init' \ && su postgres -c 'pg_ctl -D /tempdb -c -l /tmp/logfile -o '-F' start ' \ && ldconfig \ - && cd regress \ + && cd /usr/src/address_standardizer \ + && if ! PGUSER=postgres make PG_CONFIG=/usr/lib/postgresql/$PG_MAJOR/bin/pg_config installcheck; then \ + if [ -f test/regression.diffs ]; then cat test/regression.diffs; fi; \ + exit 1; \ + fi \ + && cd /usr/src/postgis/regress \ && make -j${NPROC:-$(nproc)} check RUNTESTFLAGS="--extension --verbose" PGUSER=postgres \ \ && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS postgis;"' \ && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS postgis_raster;"' \ && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS postgis_sfcgal;"' \ && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; --needed for postgis_tiger_geocoder "' \ - && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS address_standardizer;"' \ - && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS address_standardizer_data_us;"' \ - && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder;"' \ + # Some optional extensions may be absent from current PostGIS master builds. + # See: https://lists.osgeo.org/pipermail/postgis-devel/2026-February/030730.html + && su postgres -c "psql -v ON_ERROR_STOP=1 -c \"DO \\\$\\\$ DECLARE extension_name text; BEGIN FOREACH extension_name IN ARRAY ARRAY['address_standardizer', 'address_standardizer_data_us', 'postgis_tiger_geocoder'] LOOP IF EXISTS (SELECT 1 FROM pg_available_extensions WHERE name = extension_name) THEN EXECUTE format('CREATE EXTENSION IF NOT EXISTS %I', extension_name); ELSE RAISE NOTICE 'Extension % is not available, skipping', extension_name; END IF; END LOOP; END \\\$\\\$;\"" \ && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS postgis_topology;"' \ + && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS h3;"' \ + && su postgres -c 'psql -c "CREATE EXTENSION IF NOT EXISTS h3_postgis;"' \ && su postgres -c 'psql -t -c "SELECT version();"' >> /_pgis_full_version.txt \ && su postgres -c 'psql -t -c "SELECT PostGIS_Full_Version();"' >> /_pgis_full_version.txt \ && su postgres -c 'psql -t -c "\dx"' >> /_pgis_full_version.txt \ @@ -427,6 +466,8 @@ RUN set -ex \ # clean && cd / \ && rm -rf /usr/src/postgis \ + && rm -rf /usr/src/h3-pg \ + && rm -rf /usr/src/address_standardizer \ && apt-get purge -y --autoremove \ autoconf \ automake \ @@ -443,7 +484,7 @@ RUN set -ex \ libgmp-dev \ libjson-c-dev \ libmpfr-dev \ - libpcre3-dev \ + libpcre2-dev \ libprotobuf-c-dev \ libsqlite3-dev \ libtiff-dev \ diff --git a/README.md b/README.md index 7fa5a3973..866c890ec 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ **⚠️ Breaking change (PostgreSQL 18+):** Default `VOLUME` path changed to `/var/lib/postgresql` -The `postgis/postgis` image provides tags for running Postgres with [PostGIS](http://postgis.net/) extensions installed. This image is based on the official [`postgres`](https://registry.hub.docker.com/_/postgres/) image and provides Debian and Alpine variants for PostGIS 3.5.x and 3.6.x that are compatible with PostgreSQL versions 13, 14, 15, 16, 17 and 18. Additionally, image variants are provided for PostgreSQL 16 and 17, built with PostGIS (and its dependencies) from their respective master branches. These are tagged as `16-master` and `17-master`. +The `postgis/postgis` image provides tags for running Postgres with [PostGIS](http://postgis.net/) extensions installed. This image is based on the official [`postgres`](https://registry.hub.docker.com/_/postgres/) image and provides Debian and Alpine variants for PostGIS 3.5.x and 3.6.x that are compatible with PostgreSQL versions 14, 15, 16, 17 and 18. Additionally, image variants are provided for PostgreSQL 17 and 18, built with PostGIS (and its dependencies) from their respective master branches. These are tagged as `17-master` and `18-master`. This image ensures that the default database created by the parent `postgres` image will have the following extensions installed: @@ -13,15 +13,17 @@ This image ensures that the default database created by the parent `postgres` im |--------------------------|-----| | `postgis` | yes | | `postgis_topology` | yes | -| `postgis_tiger_geocoder` | yes | +| `postgis_tiger_geocoder` | yes, for PostGIS < 3.7 | | `postgis_raster` | no (available) | | `postgis_sfcgal` | no (available) | | `address_standardizer`| no (available) | | `address_standardizer_data_us`| no (available) | +For PostGIS 3.5 and 3.6 images, `address_standardizer` and `address_standardizer_data_us` are available from the PostGIS package but are not initialized by default. For `*-master` images tracking PostGIS >= 3.7, `address_standardizer` is installed separately from https://github.com/postgis/address_standardizer, while `postgis_tiger_geocoder` is no longer provided by PostGIS. + Unless `-e POSTGRES_DB` is passed to the container at startup time, this database will be named after the admin user (either `postgres` or the user specified with `-e POSTGRES_USER`). If you would prefer to use the older template database mechanism for enabling PostGIS, the image also provides a PostGIS-enabled template database called `template_postgis`. -## Versions (2026-02-18) +## Versions (2026-04-16) Supported architecture: `amd64` (x86-64) @@ -37,7 +39,7 @@ Recommended versions for new users are: * This Docker-PostGIS image has a cautious release cycle to guarantee high stability. * By "cautious", we mean it does not always have the latest versions of geos, proj, gdal, and sfcgal packages. * We use PostGIS, geos, proj, gdal, and sfcgal packages from the Debian repository. - * In the Debian Bullseye repository (for PostgreSQL 13 to 17), the versions are: + * In the Debian Bullseye repository (for PostgreSQL 14 to 17), the versions are: * geos=3.9 * gdal=3.2 * proj=7.2 @@ -53,48 +55,49 @@ Recommended versions for new users are: | DockerHub image | Dockerfile | OS | Postgres | PostGIS | | --------------- | ---------- | -- | -------- | ------- | -| [postgis/postgis:13-3.5](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=13-3.5) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/13-3.5/Dockerfile) | debian:bullseye | 13 | 3.5.2 | | [postgis/postgis:14-3.5](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=14-3.5) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/14-3.5/Dockerfile) | debian:bullseye | 14 | 3.5.2 | | [postgis/postgis:15-3.5](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=15-3.5) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/15-3.5/Dockerfile) | debian:bullseye | 15 | 3.5.2 | | [postgis/postgis:16-3.5](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=16-3.5) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/16-3.5/Dockerfile) | debian:bullseye | 16 | 3.5.2 | | [postgis/postgis:17-3.5](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=17-3.5) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/17-3.5/Dockerfile) | debian:bullseye | 17 | 3.5.2 | -| [postgis/postgis:18-3.6](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=18-3.6) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/18-3.6/Dockerfile) | debian:trixie | 18 | 3.6.2 | +| [postgis/postgis:18-3.6](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=18-3.6) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/18-3.6/Dockerfile) | debian:trixie | 18 | 3.6.3 | ### Alpine based * The base operating system is [Alpine Linux](https://alpinelinux.org/). It is designed to be small, simple, and secure, and it's based on [musl libc](https://musl.libc.org/). -* In the Alpine 3.22 version, the package versions are: - * geos=3.13.1 - * gdal=3.10.2 - * proj=9.6.0 - * sfcgal=2.0.0 +* In the Alpine 3.23 version, the package versions are: + * geos=3.14.1 + * gdal=3.11.5 + * proj=9.7.1 + * sfcgal=2.2.0 * PostGIS is compiled from source, making it a bit more challenging to extend. | DockerHub image | Dockerfile | OS | Postgres | PostGIS | | --------------- | ---------- | -- | -------- | ------- | -| [postgis/postgis:13-3.5-alpine](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=13-3.5-alpine) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/13-3.5/alpine/Dockerfile) | alpine:3.22 | 13 | 3.5.5 | -| [postgis/postgis:14-3.5-alpine](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=14-3.5-alpine) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/14-3.5/alpine/Dockerfile) | alpine:3.22 | 14 | 3.5.5 | -| [postgis/postgis:15-3.5-alpine](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=15-3.5-alpine) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/15-3.5/alpine/Dockerfile) | alpine:3.22 | 15 | 3.5.5 | -| [postgis/postgis:16-3.5-alpine](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=16-3.5-alpine) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/16-3.5/alpine/Dockerfile) | alpine:3.22 | 16 | 3.5.5 | -| [postgis/postgis:17-3.5-alpine](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=17-3.5-alpine) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/17-3.5/alpine/Dockerfile) | alpine:3.22 | 17 | 3.5.5 | -| [postgis/postgis:17-3.6-alpine](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=17-3.6-alpine) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/17-3.6/alpine/Dockerfile) | alpine:3.22 | 17 | 3.6.2 | -| [postgis/postgis:18-3.6-alpine](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=18-3.6-alpine) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/18-3.6/alpine/Dockerfile) | alpine:3.22 | 18 | 3.6.2 | +| [postgis/postgis:14-3.5-alpine](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=14-3.5-alpine) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/14-3.5/alpine/Dockerfile) | alpine:3.23 | 14 | 3.5.6 | +| [postgis/postgis:15-3.5-alpine](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=15-3.5-alpine) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/15-3.5/alpine/Dockerfile) | alpine:3.23 | 15 | 3.5.6 | +| [postgis/postgis:16-3.5-alpine](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=16-3.5-alpine) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/16-3.5/alpine/Dockerfile) | alpine:3.23 | 16 | 3.5.6 | +| [postgis/postgis:17-3.5-alpine](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=17-3.5-alpine) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/17-3.5/alpine/Dockerfile) | alpine:3.23 | 17 | 3.5.6 | +| [postgis/postgis:17-3.6-alpine](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=17-3.6-alpine) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/17-3.6/alpine/Dockerfile) | alpine:3.23 | 17 | 3.6.3 | +| [postgis/postgis:18-3.6-alpine](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=18-3.6-alpine) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/18-3.6/alpine/Dockerfile) | alpine:3.23 | 18 | 3.6.3 | ### Test images * We provide alpha, beta, release candidate (rc), and development (identified as ~master) versions. -* The template for the `*-master` images is updated manually, which might lead to a delay of a few weeks sometimes. +* For `*-master` images, the template is updated manually, which might lead to a delay of a few weeks sometimes. +* Current PostGIS 3.7 development images use the up-to-date CGAL revision from the `6.1.x-branch`. +* Starting with PostGIS >= 3.7, PostGIS itself no longer includes the `address_standardizer` and `postgis_tiger_geocoder` extensions. The `*-master` images install `address_standardizer` separately from https://github.com/postgis/address_standardizer and run its upstream-style installcheck. See: https://lists.osgeo.org/pipermail/postgis-devel/2026-February/030730.html +* They also install the `h3` and `h3_postgis` extensions from the `main` branch of https://github.com/postgis/h3-pg; because this is a development branch, their extension version may appear as `unreleased`. | DockerHub image | Dockerfile | OS | Postgres | PostGIS | | --------------- | ---------- | -- | -------- | ------- | -| [postgis/postgis:16-master](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=16-master) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/16-master/Dockerfile) | debian:bullseye | 16 | development: postgis, geos, proj, gdal | -| [postgis/postgis:17-master](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=17-master) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/17-master/Dockerfile) | debian:bullseye | 17 | development: postgis, geos, proj, gdal | +| [postgis/postgis:17-master](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=17-master) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/17-master/Dockerfile) | debian:trixie | 17 | development: postgis, geos, proj, gdal | +| [postgis/postgis:18-master](https://registry.hub.docker.com/r/postgis/postgis/tags?page=1&name=18-master) | [Dockerfile](https://github.com/postgis/docker-postgis/blob/master/18-master/Dockerfile) | debian:trixie | 18 | development: postgis, geos, proj, gdal | ## Usage @@ -154,7 +157,7 @@ This affects all corresponding **`postgis/postgis:18-*`** and newer images. | Image name | Image tag range | `--volume` path | |-------------|-----------------|-----------------| | `postgis/postgis` | `18-*` … | `/var/lib/postgresql` | -| `postgis/postgis` | `13-*` … `17-*` | `/var/lib/postgresql/data` | +| `postgis/postgis` | `14-*` … `17-*` | `/var/lib/postgresql/data` | Please adjust your volume mounts for 18+ images. For more details, see the [upstream change](https://github.com/docker-library/postgres/pull/1259). diff --git a/initdb-postgis.sh b/initdb-postgis.sh index e38ad7d66..ae56ee0ba 100644 --- a/initdb-postgis.sh +++ b/initdb-postgis.sh @@ -19,7 +19,23 @@ for DB in template_postgis "$POSTGRES_DB"; do -- Reconnect to update pg_setting.resetval -- See https://github.com/postgis/docker-postgis/issues/288 \c - CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; - CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + -- + DO $$ + DECLARE + postgis_major integer; + postgis_minor integer; + BEGIN + SELECT substring(postgis_lib_version() from '^([0-9]+)')::integer, + substring(postgis_lib_version() from '^[0-9]+\.([0-9]+)')::integer + INTO postgis_major, postgis_minor; + + -- Install the legacy tiger geocoder stack only for PostGIS versions before 3.7. + -- fuzzystrmatch is required by postgis_tiger_geocoder, which PostGIS 3.7 and later no longer provide. + IF postgis_major < 3 OR (postgis_major = 3 AND postgis_minor < 7) THEN + CREATE EXTENSION IF NOT EXISTS fuzzystrmatch; + CREATE EXTENSION IF NOT EXISTS postgis_tiger_geocoder; + END IF; + END + $$; EOSQL done diff --git a/test/tests/postgis-basics/run.sh b/test/tests/postgis-basics/run.sh index d04be5ac1..6cfc804da 100755 --- a/test/tests/postgis-basics/run.sh +++ b/test/tests/postgis-basics/run.sh @@ -40,12 +40,36 @@ echo 'SELECT PostGIS_Version()' | psql ## test address_standardizer extension -echo 'CREATE EXTENSION address_standardizer;' | psql -response=$(echo $'SELECT zip FROM parse_address(\'1 Devonshire Place, Boston, MA 02109-1234\') AS a;' | psql) -if [ $response = 02109 ]; then - echo "address_standardizer extension installed and works!" -else - echo "address_standardizer extension test failed, returned response is $response" - exit 1 -fi +# PostGIS versions before 3.7 are expected to provide address_standardizer. +# For PostGIS 3.7 and later, test it only when the separately packaged +# extension is available in the image. +test_address_standardizer="$( + psql <<-'EOSQL' + SELECT CASE + WHEN postgis_major < 3 OR (postgis_major = 3 AND postgis_minor < 7) THEN 'required' + WHEN EXISTS ( + SELECT 1 + FROM pg_available_extensions + WHERE name = 'address_standardizer' + ) THEN 'available' + ELSE 'skip' + END + FROM ( + SELECT substring(postgis_lib_version() from '^([0-9]+)')::integer AS postgis_major, + substring(postgis_lib_version() from '^[0-9]+\.([0-9]+)')::integer AS postgis_minor + ) AS postgis_version; + EOSQL +)" +if [ "$test_address_standardizer" = required ] || [ "$test_address_standardizer" = available ]; then + echo 'CREATE EXTENSION IF NOT EXISTS address_standardizer;' | psql + response=$(echo $'SELECT zip FROM parse_address(\'1 Devonshire Place, Boston, MA 02109-1234\') AS a;' | psql) + if [ "$response" = 02109 ]; then + echo "address_standardizer extension installed and works!" + else + echo "address_standardizer extension test failed, returned response is $response" + exit 1 + fi +else + echo "PostGIS 3.7 or later detected without address_standardizer, skipping address_standardizer test" +fi diff --git a/update.sh b/update.sh index 4ee2ffb0f..75c143611 100755 --- a/update.sh +++ b/update.sh @@ -25,7 +25,7 @@ githubrepolink="https://github.com/postgis/docker-postgis/blob/master" # sort version numbers with highest last (so it goes first in .travis.yml) IFS=$'\n'; versions=( $(echo "${versions[*]}" | sort -V) ); unset IFS -defaultAlpinenSuite='3.22' +defaultAlpinenSuite='3.23' defaultDebianSuite='bullseye-slim' declare -A debianSuite=( # https://github.com/docker-library/postgres/issues/582 @@ -52,12 +52,15 @@ declare -A postgisDebPkgNameVersionSuffixes=( packagesBase='http://apt.postgresql.org/pub/repos/apt/dists/' -cgalGitHash="$(git ls-remote https://github.com/CGAL/cgal.git heads/main | awk '{ print $1}')" +cgalGitBranch='6.1.x-branch' +cgalGitHash="$(git ls-remote https://github.com/CGAL/cgal.git "heads/${cgalGitBranch}" | awk '{ print $1}')" sfcgalGitHash="$(git ls-remote https://gitlab.com/SFCGAL/SFCGAL.git heads/master | awk '{ print $1}')" projGitHash="$(git ls-remote https://github.com/OSGeo/PROJ.git heads/master | awk '{ print $1}')" gdalGitHash="$(git ls-remote https://github.com/OSGeo/gdal.git refs/heads/master | grep '\srefs/heads/master' | awk '{ print $1}')" geosGitHash="$(git ls-remote https://github.com/libgeos/geos.git heads/main | awk '{ print $1}')" postgisGitHash="$(git ls-remote https://github.com/postgis/postgis.git heads/master | awk '{ print $1}')" +h3PgGitHash="$(git ls-remote https://github.com/postgis/h3-pg.git heads/main | awk '{ print $1}')" +addressStandardizerGitHash="$(git ls-remote https://github.com/postgis/address_standardizer.git heads/main | awk '{ print $1}')" #------------------------------------------- # Correct version sorting @@ -142,7 +145,9 @@ for version in "${versions[@]}"; do echo "postgresVersion=$postgresVersion" echo "postgisVersion=$postgisVersion" - if [ "2.5" == "$postgisVersion" ]; then + if [ "master" == "$postgisVersion" ]; then + tag='trixie-slim' + elif [ "2.5" == "$postgisVersion" ]; then # posgis 2.5 only in the stretch ; no bullseye version tag='stretch-slim' else @@ -163,8 +168,10 @@ for version in "${versions[@]}"; do if [ "$suite" = "bullseye" ]; then boostVersion="1.74.0" + boostChronoVersion="1.74.0" elif [ "$suite" = "trixie" ]; then - boostVersion="1.88.0" + boostVersion="1.83.0" + boostChronoVersion="1.83.0t64" else echo "Unknown debian version; stop" exit 1 @@ -238,7 +245,7 @@ for version in "${versions[@]}"; do else cat Dockerfile.template > "$version/Dockerfile" fi - sed -i 's/%%TXT_AUTOGENERATED%%/'"$autogenerated"'/g; s/%%PG_MAJOR%%/'$postgresVersion'/g; s/%%POSTGIS_MAJOR%%/'$postgisMajor'/g; s/%%POSTGIS_VERSION%%/'$postgisFullVersion'/g; s/%%POSTGIS_GIT_HASH%%/'$postgisGitHash'/g; s/%%CGAL_GIT_HASH%%/'$cgalGitHash'/g; s/%%SFCGAL_GIT_HASH%%/'$sfcgalGitHash'/g; s/%%PROJ_GIT_HASH%%/'$projGitHash'/g; s/%%GDAL_GIT_HASH%%/'$gdalGitHash'/g; s/%%GEOS_GIT_HASH%%/'$geosGitHash'/g; s/%%BOOST_VERSION%%/'"$boostVersion"'/g; s/%%DEBIAN_VERSION%%/'"$suite"'/g;' "$version/Dockerfile" + sed -i 's/%%TXT_AUTOGENERATED%%/'"$autogenerated"'/g; s/%%PG_MAJOR%%/'$postgresVersion'/g; s/%%POSTGIS_MAJOR%%/'$postgisMajor'/g; s/%%POSTGIS_VERSION%%/'$postgisFullVersion'/g; s/%%CGAL_GIT_BRANCH%%/'"$cgalGitBranch"'/g; s/%%POSTGIS_GIT_HASH%%/'$postgisGitHash'/g; s/%%H3_PG_GIT_HASH%%/'$h3PgGitHash'/g; s/%%ADDRESS_STANDARDIZER_GIT_HASH%%/'$addressStandardizerGitHash'/g; s/%%CGAL_GIT_HASH%%/'$cgalGitHash'/g; s/%%SFCGAL_GIT_HASH%%/'$sfcgalGitHash'/g; s/%%PROJ_GIT_HASH%%/'$projGitHash'/g; s/%%GDAL_GIT_HASH%%/'$gdalGitHash'/g; s/%%GEOS_GIT_HASH%%/'$geosGitHash'/g; s/%%BOOST_VERSION%%/'"$boostVersion"'/g; s/%%BOOST_CHRONO_VERSION%%/'"$boostChronoVersion"'/g; s/%%DEBIAN_VERSION%%/'"$suite"'/g;' "$version/Dockerfile" echo "| [postgis/postgis:${version}](${dockerhublink}${version}) | [Dockerfile](${githubrepolink}/${version}/Dockerfile) | debian:${suite} | ${postgresVersion} | ${postgisDocSrc} |" >> _dockerlists_${optimized}.md )