Instala PostGIS para AlloyDB Omni

Selecciona una versión de la documentación:

En esta página, se describe cómo agregar manualmente la extensión PostGIS a una instalación existente de AlloyDB Omni. La extensión PostGIS permite almacenar, indexar y consultar datos geoespaciales.

Puedes instalar PostGIS con cualquiera de los siguientes métodos:

  • Usa las opciones de Debian en la CLI de Docker o Podman. Docker depende de un daemon y requiere privilegios de administrador para la mayoría de las operaciones, mientras que Podman no tiene daemon y no requiere privilegios de administrador.
  • Usa imágenes base universales (UBI) de Red Hat. Las imágenes de sistemas operativos base de contenedores de UBI se compilan a partir de partes de Red Hat Enterprise Linux (RHEL).

Antes de comenzar

Instala AlloyDB Omni en tu sistema.

Agrega PostGIS a tu instalación de AlloyDB Omni

Para agregar la extensión PostGIS a tu instalación de AlloyDB Omni, sigue estos pasos:

  1. Sigue estos pasos para encontrar las etiquetas de la versión de AlloyDB Omni que instalaste:

    Docker

    docker run --rm -it  google/alloydbomni cat VERSION.txt
    

    Podman

    podman run --rm -it  google/alloydbomni cat VERSION.txt
    

    El resultado es similar a este:

    AlloyDB Omni version: 16.8.0
    

    Toma nota del número de versión de AlloyDB Omni porque lo necesitarás en el siguiente paso.

  2. Establece la variable de entorno OMNI_VERSION:

    OMNI_VERSION=VERSION
    

    Reemplaza VERSION por la versión completa del servidor de la base de datos del paso anterior, por ejemplo, 16.8.0.

  3. Compila una imagen personalizada de Docker que incluya la extensión PostGIS:

    mkdir ~/alloydb-omni-postgis
    
    cd ~/alloydb-omni-postgis
    
    sudo dnf install -y subscription-manager
    
    sudo subscription-manager register --username EMAIL --password PASSWORD --auto-attach
    
    sudo mkdir -p entitlement rhsm-conf rhsm-ca
        sudo cp -r /etc/pki/entitlement/* entitlement/
        sudo cp -r /etc/rhsm/rhsm.conf rhsm-conf/
        sudo cp -r /etc/rhsm/ca/* rhsm-ca/
    
    cat <<EOF > Dockerfile
        FROM google/alloydbomni:16.8.0-ubi
        COPY ./entitlement /etc/pki/entitlement
        COPY ./rhsm-conf /etc/rhsm
        COPY ./rhsm-ca /etc/rhsm/ca
        RUN arch=$(uname -m) && \
            subscription-manager repos --enable codeready-builder-for-rhel-9-${arch}-rpms && \
            dnf install -y \
            https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-${arch}/pgdg-redhat-repo-latest.noarch.rpm && \
            dnf install -y postgresql16-server postgis34_16 && \
            dnf clean all
        # On RHEL-based systems, PostgreSQL extensions like Orafce and PostGIS are typically installed in /usr/pgsql-16/share/extension and /usr/pgsql-16/lib.
        # This step creates symbolic links to those files in the paths expected by AlloyDB Omni,
        # which lets AlloyDB Omni locate extension control files and shared libraries without duplicating data.
        RUN for file in /usr/pgsql-16/share/extension/*; do \
           target="/usr/lib/postgresql/16/share/extension/$(realpath -m --relative-to=/usr/pgsql-16/share/extension/ "$file")"; \
           if [ ! -e "$target" ]; then \
              ln -s "$file" "$target" || (echo "Failed to link \"$file\" to \"$target\", exiting." && exit 1); \
           else \
              echo "$target already exists"; \
           fi; \
        done && \
        for file in /usr/pgsql-16/lib/*; do \
           target="/usr/lib/postgresql/16/lib/$(realpath -m --relative-to=/usr/pgsql-16/lib/ "$file")"; \
           if [ ! -e "$target" ]; then \
              ln -s "$file" "$target" || (echo "Failed to link \"$file\" to \"$target\", exiting." && exit 1); \
           else \
              echo "$target already exists"; \
           fi; \
        done
    EOF
    

  4. Crea un nuevo contenedor con AlloyDB Omni llamado my-omni-postgis:

    Docker

    docker build -t google/alloydbomni-with-postgis:latest
    docker run --name my-omni-postgis  -e POSTGRES_PASSWORD=NEW_PASSWORD  -d google/alloydbomni-with-postgis:OMNI_VERSION
    

    Podman

    podman run --name my-omni-postgis  -e POSTGRES_PASSWORD=NEW_PASSWORD  -d google/alloydbomni-with-postgis:OMNI_VERSION
    
  5. Conéctate a tu base de datos con la extensión PostGIS:

    docker exec -it my-omni-postgis psql -h localhost -U postgres
    
  6. Habilita PostGIS:

    CREATE EXTENSION IF NOT EXISTS POSTGIS;
    SELECT postgis_full_version();
    

    El resultado es similar al siguiente:

    postgres=# SELECT postgis_full_version();
    postgis_full_version
    --------------------------------------------------------------------------------------------------------------------------------
    POSTGIS="3.3.2 4975da8" [EXTENSION] PGSQL="150" GEOS="3.11.1-CAPI-1.17.1" PROJ="9.1.1" LIBXML="2.9.14" LIBJSON="0.16" LIBPROTOBUF="1.4.1" WAGYU="0.5.0 (Internal)"
    (1 row)