Skip to content

Including Extensions (PostGIS)

Sam edited this page Jul 25, 2024 · 4 revisions

Adding an extension to the container image

  • Some common extensions are already bundled with pgautoupgrade.
  • However, many extensions, such as PostGIS or TimescaleDB require additional work to be included in the upgrade.
  • This example will build an extended pgautoupgrade image, including the PostGIS extension.
  • A similar process could be followed to install any additional extension you may need (as long as a pre-built container image exists including the extension).
FROM docker.io/postgis/postgis:14-3.4-alpine as pg14
FROM docker.io/postgis/postgis:15-3.4-alpine as pg15
FROM docker.io/postgis/postgis:16-3.4-alpine as pg16
FROM docker.io/pgautoupgrade/pgautoupgrade:16-alpine as pgautoupgrade

# Original entrypoint overwritten in /usr/local/bin, so copy elsewhere
RUN cp /usr/local/bin/docker-entrypoint.sh /docker-entrypoint.sh

# Remove libs for Postgres < v14
RUN rm -rf \
    /usr/local-pg9.5 \
    /usr/local-pg9.6 \
    /usr/local-pg10 \
    /usr/local-pg11 \
    /usr/local-pg12 \
    /usr/local-pg13

# Copy in PostGIS libs / bins
COPY --from=pg16 /_pgis*.* /
COPY --from=pg16 /usr/lib /usr/lib

# Copy extensions for postgresql 16
COPY --from=pg16 /usr/local /usr/local
# Copy all extensions for postgresql 15
COPY --from=pg15 /usr/local/lib/postgresql /usr/local-pg15/lib/postgresql
# Copy all extensions for postgresql 14
COPY --from=pg14 /usr/local/lib/postgresql /usr/local-pg14/lib/postgresql

# Squash image to reduce size
FROM scratch
COPY --from=pgautoupgrade / /
ENV \
    PGTARGET=16 \
    PGDATA=/var/lib/postgresql/data
WORKDIR /var/lib/postgresql
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["postgres"]

Note that the steps to remove versions of Postgres < v14 and to squash the image at the end are not mandatory and can be removed.

Using the image

  • Create a file named Dockerfile with the content above.
  • Build the image: docker build . -t pgautoupgrade/pgautoupgrade:16-3.4-alpine (Postgres=16, PostGIS=3.4).
  • Use the image name as a drop in replacement for the pgautoupgrade workflows already described in this repo.
Clone this wiki locally