1.2.2. Instalando o PostgreSQL através de um Contêiner Docker

Aviso

Se você já tiver instalado o PostgreSQL e PostGIS com os passos descritos na Seção 1.2.1, não há necessidade de seguir os passos desta seção.

Vamos utilizar a imagem Docker disponível para o PostgreSQL e PostGIS. O comando abaixo irá realizar o download da imagem contendo a instalação do PostgreSQL 14.5 e o PostGIS 3.3.1:

docker pull postgis/postgis:14-3.3

Após baixar a imagem Docker, crie um contêiner através do seguinte comando:

docker run --detach \
           --name my-pg \
           --publish 127.0.0.1:5432:5432 \
           --env "POSTGRES_PASSWORD=secreto" \
           postgis/postgis:14-3.3

O comando acima irá criar um contêiner chamado my-pg, ligando a porta 5432 do host com a porta 5432 do contêiner. Além disso, o usuário padrão postgres será definido com a senha representada pelo texto secreto.

Verifique se o contêiner com o servidor PostgreSQL se encontra em execução. Para isso, utilize o seguinte comando:

docker container ls

Uma saída como amostrada abaixo deverá ser apresentada:

CONTAINER ID   IMAGE                    COMMAND                  CREATED              STATUS              PORTS                      NAMES
6c4cd445ad46   postgis/postgis:14-3.3   "docker-entrypoint.s…"   About a minute ago   Up About a minute   127.0.0.1:5432->5432/tcp   my-pg

1.2.2.1. Verificando a Versão do PostgreSQL

Se o contêiner my-pg estiver em execução, verifique a versão do PostgreSQL contida nele através do seguite comando:

docker exec my-pg psql -U postgres -c "SELECT version();"

Esse comando deverá produzir uma saída semelhante à apresentada abaixo:

                                                           version
-----------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 14.5 (Debian 14.5-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
(1 row)

1.2.2.2. Verificando a Versão do PostGIS

Para verificar a versão do PostGIS, utilize o comando abaixo:

docker exec my-pg psql -U postgres \
                       -c "SELECT name, default_version FROM pg_available_extensions WHERE name = 'postgis';"

Esse comando deverá produzir uma saída semelhante à apresentada abaixo:

  name   | default_version
---------+-----------------
 postgis | 3.3.1
(1 row)

1.2.2.3. Dicas Gerenciamento do Contêiner

Para parar o contêiner, faça:

docker stop my-pg

Para remover o contêiner (parado):

docker rm my-pg

Para criar um contêiner com um diretório do host compartilhado, use a opção --volume como mostrado abaixo:

mkdir -p /home/gribeiro/aulas/bd/pg-data
mkdir -p /home/gribeiro/aulas/dados

docker run --detach \
           --name my-pg \
           --publish 127.0.0.1:5432:5432 \
           --env "POSTGRES_PASSWORD=secreto" \
           --volume /home/gribeiro/aulas/bd/pg-data:/var/lib/postgresql/data \
           --volume /home/gribeiro/aulas/dados:/shared-data \
           postgis/postgis:14-3.3

Aviso

Lembre-se de substituir os diretórios /home/gribeiro/aulas/bd/pg-data e /home/gribeiro/aulas/dados por caminhos válidos em seu sistema.

Nota

Se você quiser instalar os aplicativos de linha de comando do PostGIS, shape2pgsql e raster2pgsql, abra um shell no contêiner my-pg e instale o pacote postgis:

docker exec -it my-pg bash
apt update
apt install postgis

Nota

Nesta seção, utilizamos uma imagem do PostgreSQL com PostGIS baseada na distribuição Linux Debian GNU/Linux 11 (bullseye).