Instalar o PostGIS para o AlloyDB Omni

Selecione uma versão da documentação:

Nesta página, descrevemos como adicionar manualmente a extensão PostGIS a uma instalação do AlloyDB Omni atual. A extensão PostGIS permite armazenar, indexar e consultar dados geoespaciais.

É possível instalar o PostGIS usando um dos seguintes métodos:

  • Use as opções do Debian na CLI do Docker ou do Podman. O Docker depende de um daemon e exige privilégios de root para a maioria das operações, enquanto o Podman não tem daemon e não exige privilégios de root.
  • Use as imagens de base universais (UBI, na sigla em inglês) da Red Hat. As imagens do sistema operacional de base do contêiner UBI são criadas com partes do Red Hat Enterprise Linux (RHEL).

Antes de começar

Instale o AlloyDB Omni no seu sistema.

Adicionar o PostGIS à instalação do AlloyDB Omni

Para adicionar a extensão PostGIS à sua instalação do AlloyDB Omni, siga estas etapas:

  1. Encontre os rótulos da versão instalada do AlloyDB Omni:

    Docker

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

    Podman

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

    O resultado será assim:

    AlloyDB Omni version: 16.3.0
    

    Anote o número da versão do AlloyDB Omni, porque você vai precisar dele na próxima etapa.

  2. Defina a variável de ambiente OMNI_VERSION:

    OMNI_VERSION=VERSION
    

    Substitua VERSION pela versão completa do servidor de banco de dados da etapa anterior, por exemplo, 16.3.0.

  3. Crie uma imagem do Docker personalizada que inclua a extensão 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.3.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. Crie um contêiner com o AlloyDB Omni chamado 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. Conecte-se ao banco de dados com a extensão PostGIS:

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

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

    A saída será assim:

    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)