Métodos de Atualização do PostgreSQL para uma Nova Versão

Métodos de Atualização do PostgreSQL para uma Nova Versão
Hostman Team
Redator técnico
Bancos de dados PostgreSQL
06.11.2025
Reading time: 9 min

No PostgreSQL, a atualização de versões é realizada de diferentes maneiras:

  • Instalar pacotes com uma nova versão do PostgreSQL. Este método é adequado apenas para atualizações menores. Antes de realizar a atualização, consulte as notas de versão.

  • Uso do programa padrão pg_dumpall. É um método confiável, mas pode haver um tempo de inatividade prolongado.

  • Uso do programa padrão pg_upgrade. Outra maneira rápida de atualizar, mas erros podem ocorrer.

  • Atualização via replicação lógica. Esta opção tem um tempo de inatividade mínimo, mas é adequada apenas para versões do PostgreSQL superiores a 10.0. Versões anteriores exigem extensões. A escolha depende da versão em uso no servidor e da versão para a qual você deseja atualizar.
    Neste artigo, vamos explorar todos os métodos de atualização mencionados.

Notas Importantes Antes de Atualizar

O principal é entender as particularidades das atualizações entre diferentes versões.
Os números de versão consistem em dois dígitos, por exemplo, 10.1. O primeiro dígito é o número da versão principal (10). O segundo dígito é o número da versão menor (1).
Antes do PostgreSQL 10, os números de versão consistiam em três dígitos. Por exemplo, em 9.6.3, 9.6 é o número da versão principal e 3 é o número da versão menor.

Você deve entender essa diferença para escolher o método de atualização correto.

Nas versões menores, o formato de armazenamento de dados não muda, portanto, não há problemas de compatibilidade. Por isso, a transição do PostgreSQL 10.1 para o 10.6 pode ser feita muito facilmente. Para atualizar, basta desligar o servidor, substituir os arquivos executáveis e reiniciar o servidor.
No entanto, a documentação observa que algumas versões podem exigir alterações manuais. Portanto, sempre leia as notas de versão antes de atualizar.

Nas versões principais, o formato dos dados pode mudar. Isso torna a atualização mais difícil. Você precisará descarregar os dados e carregá-los novamente, usar o programa pg_upgrade ou utilizar replicação lógica.

Atualização Dentro de uma Mesma Versão Principal

Vamos ver como atualizar o PostgreSQL versão 14.1 para PostgreSQL 14.3 em um servidor Ubuntu.

O PostgreSQL está disponível no Ubuntu por padrão. Comece com o comando:

sudo apt-get upgrade

O Debian e o Ubuntu lançam apenas uma versão do PostgreSQL para cada versão do sistema operacional. Por exemplo, o Debian Squeeze/6.0 só tem o PostgreSQL 8.4. Se você precisar de uma versão diferente do PostgreSQL, use os pacotes do PGDG.

Se você deseja a versão mais recente do PostgreSQL, primeiro deve instalar o repositório do Postgres.

Adicione um repositório:

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

Imprima a chave de assinatura:

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Atualize a lista de pacotes no sistema:

sudo apt-get update

Instale a versão necessária do PostgreSQL:

sudo apt-get -y install postgresql-14.3

Para ver a lista de DBMSs instalados, execute:

dpkg --get-selections | grep postgres

Também veja a lista de clusters:

pg_lsclusters

Desligue o PostgreSQL antes de fazer alterações:

sudo service postgresql stop

Quando os pacotes do PostgreSQL são instalados, eles criam um cluster padrão para você. Você deve renomear o novo cluster do Postgres para evitar conflitos com o nome do antigo cluster ao atualizar.

sudo pg_renamecluster 14.3 main main_pristine

Atualize o antigo cluster:

sudo pg_upgradecluster 14.1 main

Inicie o serviço:

sudo service postgresql start

Verifique novamente a lista de clusters e certifique-se de que o novo cluster está funcionando:

pg_lsclusters

Remova o antigo cluster:

sudo pg_dropcluster 14.1 main

Atualização via pg_dumpall

Se você precisar mudar a versão principal, use o programa pg_dumpall. A essência deste método é descarregar os dados de uma versão principal e depois carregá-los em outra.

Antes de descarregar os dados, certifique-se de que nenhuma alteração está sendo feita no banco de dados no momento. Caso contrário, algumas das alterações podem não ser incluídas no dump final.

Obtenha o dump e escreva-o em um arquivo:

pg_dumpall > output_file

Desligue o servidor:

pg_ctl stop

Mude o nome do diretório antigo para evitar conflitos de nome:

mv /usr/local/pgsql /usr/local/pgsql.old

O diretório antigo pode ser excluído. Mas é mais sensato renomeá-lo para deixar espaço para restauração. Em vez de /usr/local/pgsql, especifique o caminho para o seu diretório.

Instale a nova versão a partir do código-fonte. Existe um guia detalhado na documentação.

Crie um novo cluster:

/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

Transfira todas as alterações para os arquivos pg_hba.conf e postgresql.conf.

Inicie o servidor de banco de dados:

/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data

Restaure os dados do backup:

/usr/local/pgsql/bin/psql -d postgres -f output_file

A desvantagem deste método é que o servidor ficará desligado por um longo tempo. Para reduzir o tempo de inatividade, você pode instalar o novo servidor em um diretório diferente e depois executar os servidores antigo e novo em diferentes portas. Para transferir os dados, use o comando:

pg_dumpall -p 5432 | psql -d postgres -p 5433

Em vez de 5432 e 5433, especifique os números de porta em que você executou os servidores.

Atualização via pg_upgrade

Para evitar descarregar e carregar dados, use o programa pg_upgrade. Ele ajuda a atualizar mais rápido. O programa pg_upgrade cria novas tabelas do sistema, levando em conta as mudanças nas últimas versões do PostgreSQL. Nesse caso, os antigos arquivos de dados são mantidos. Além disso, o pg_upgrade verifica se os clusters são compatíveis.

O programa pg_upgrade ajuda você a atualizar do PostgreSQL 8.4.X para a versão atual do DBMS.

Vamos ver um plano de atualização geral usando o pg_upgrade.

Mova o cluster antigo. Isso deve ser feito se o diretório não estava vinculado à versão antiga. Por exemplo, se ele estiver em /usr/local/pgsql. Se você não renomeá-lo, ocorrerá um conflito durante a atualização.

O renomeio é feito quando o servidor está desligado com o comando:

mv /usr/local/pgsql /usr/local/pgsql.old

Construa a nova versão a partir do código-fonte. Ajuste o configure para que as opções sejam compatíveis com a configuração do cluster antigo. Antes de iniciar a atualização, o pg_upgrade verificará a compatibilidade das opções.

Instale novos arquivos executáveis. Para colocar o servidor em um diretório não padrão, use o prefixo:

make prefix=/usr/local/pgsql.new install

Use o initdb para inicializar um novo cluster. Verifique se as opções são compatíveis com as do cluster antigo.

Instale os arquivos de objetos compartilhados de extensão. Se houver atualizações disponíveis, o pg_upgrade criará automaticamente um script para sua instalação posterior.

Transfira os arquivos de pesquisa de texto completo.

Configure a autenticação de pares no pg_hba.conf. Isso deve ser feito porque o pg_upgrade se conectará aos antigos e novos hosts várias vezes.

Verifique se os servidores antigo e novo estão parados:

pg_ctl -D /opt/PostgreSQL/9.6 stop

pg_ctl -D /opt/PostgreSQL/14 stop

Execute o pg_upgrade no novo servidor. Primeiro, execute o programa em modo de verificação adicionando a opção: pg_upgrade --check. Em resposta, você receberá uma lista de ajustes que precisam ser feitos manualmente após a atualização.

Se você fez alterações no arquivo pg_hba.conf, restaure-o para o seu estado anterior. Às vezes, outras configurações no novo cluster precisam ser alteradas para coincidir com a configuração do cluster antigo.

Inicie o servidor.

Se estiver satisfeito com o resultado, exclua o cluster antigo.

Para detalhes e características do uso do pg_upgrade, consulte a documentação.

Uso de Replicação Lógica

A partir da versão 10 do PostgreSQL, temos um método para replicação lógica de objetos de dados e as mudanças neles. Ele é baseado no uso de identificadores de replicação; geralmente, são chaves primárias.

A replicação lógica usa o modelo de publicação-assinatura. O usuário cria uma captura instantânea do banco de dados publicado e a copia para o assinante. Na documentação do PostgreSQL, um dos cenários típicos para usar replicação lógica é precisamente a replicação entre diferentes versões principais do PostgreSQL.

O servidor de backup pode estar no mesmo host ou em outro. Após a sincronização estar concluída, várias opções estão disponíveis. Por exemplo, você pode fazer o novo servidor ser o principal e desligar o antigo.

A principal vantagem da replicação lógica é o tempo de inatividade mínimo. A interrupção do servidor, em alguns casos, é limitada a apenas alguns segundos.

Conclusão

Examinamos os métodos universais para atualizar o PostgreSQL para uma nova versão principal e atualizar dentro de uma versão principal.

Com este guia, você pode selecionar o método que funciona melhor para o seu caso particular e atualizar sua versão atual do PostgreSQL.

Bancos de dados PostgreSQL
06.11.2025
Reading time: 9 min

Semelhante

Ambiente Kubernetes

Como implantar o PostgreSQL no Kubernetes: guia passo a passo

O PostgreSQL é um sistema de gerenciamento de banco de dados relacional (RDBMS) amplamente utilizado que oferece recursos de alta disponibilidade, como replicação em streaming, replicação lógica e soluções de failover. Implantar o PostgreSQL no Kubernetes permite criar sistemas resilientes, garantindo mínimo tempo de inatividade e alta disponibilidade dos dados. Com os StatefulSets do Kubernetes, é possível escalar o PostgreSQL de acordo com a demanda. Choose hour server now! Preparando o ambiente Kubernetes Certifique-se de ter os seguintes componentes: Cluster Kubernetes (na nuvem ou local): você pode configurar rapidamente um cluster no Hostman. Para ambiente local, use ferramentas como k3s, minikube, microk8s ou kind. kubectl: a ferramenta de linha de comando usada para interagir com o cluster. Ela requer um arquivo YAML de configuração com os detalhes do cluster (geralmente fornecido pelo provedor de nuvem).  No painel do Hostman, é possível baixar esse arquivo com um clique e, em seguida, definir a variável de ambiente: Para conectar, você precisa definir a variável de ambiente KUBECONFIG adequadamente. export KUBECONFIG=/absolute/path/to/file/k8s-cluster-config.yaml Helm: é necessário o utilitário Helm CLI para instalar charts. Use a versão 3. Implantar o PostgreSQL usando um chart Helm O Helm é o gerenciador de pacotes do Kubernetes — semelhante ao apt no Ubuntu/Debian. Em vez de criar vários arquivos YAML manualmente (Pods, Services, Volumes, Secrets etc.), o Helm simplifica todo o processo em um único comando. Passo 1: Adicionar o repositório Helm helm repo add bitnami https://charts.bitnami.com/bitnami Para sincronizar seu repositório Helm local com o remoto: helm repo update Passo 2: Gerenciar a persistência de dados O PostgreSQL requer armazenamento persistente para garantir que os dados não sejam perdidos se um pod falhar ou for reimplantado. Crie o arquivo postgres-local-pv.yaml: apiVersion: v1 kind: PersistentVolume metadata: name: postgresql-local-pv spec: capacity: storage: 5Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: manual hostPath: path: /mnt/data/postgresql Atenção: o hostPath aponta para um diretório local em um nó específico — não recomendado para ambientes de produção. Para produção, utilize soluções de armazenamento nativas da nuvem (Ceph, Portworx, OpenEBS, GlusterFS) para obter confiabilidade e escalabilidade. Crie a PersistentVolumeClaim (PVC) — arquivo postgres-local-pvc.yaml: apiVersion: v1 kind: PersistentVolumeClaim metadata: name: postgresql-local-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi storageClassName: manual O modo ReadWriteOnce permite acesso de leitura e gravação por apenas um nó por vez. Usar ReadWriteMany não aumenta a disponibilidade no PostgreSQL e pode causar corrupção de dados ou condições de corrida. Aplique os manifests: kubectl apply -f postgres-local-pv.yamlkubectl apply -f postgres-local-pvc.yaml Passo 3: Instalar o PostgreSQL com Helm helm install tutorial-db bitnami/postgresql --set auth.username=bhuwan \ --set auth.password=”AeSeigh2gieshe” \ --set auth.database=k8s-tutorial \ --set auth.postgresPassword=”Ze4hahshez6dop9vaing” \ --set primary.persistence.existingClaim=postgresql-local-pvc \ --set volumePermissions.enabled=true Verifique o status após alguns minutos: kubectl get all Passo 4: Testar a conexão export POSTGRES_PASSWORD=$(kubectl get secret --namespace default tutorial-db-postgresql -o jsonpath="{.data.password}" | base64 -d) kubectl run tutorial-db-postgresql-client --rm --tty -i --restart='Never' \ --image docker.io/bitnami/postgresql:17.2.0-debian-12-r6 \ --env="PGPASSWORD=$POSTGRES_PASSWORD" \ --command -- psql --host tutorial-db-postgresql \ -U bhuwan -d k8s-tutorial -p 5432 O pod será removido automaticamente após o encerramento da sessão devido à flag --rm. Se você alterou o nome do release, o usuário ou o banco de dados, atualize os comandos conforme necessário. Implantar o PostgreSQL no Kubernetes do zero Um StatefulSet é o tipo de recurso ideal para aplicativos com estado, como o PostgreSQL, pois fornece identidade de rede estável e volumes persistentes dedicados para cada pod. Limpe e recrie os recursos: helm delete tutorial-db kubectl delete pvc postgresql-local-pvc kubectl delete pv postgresql-local-pv kubectl apply -f postgres-local-pv.yaml -f postgres-local-pvc.yaml Crie o arquivo postgres-statefulset.yaml: apiVersion: apps/v1 kind: StatefulSet metadata: name: postgres-statefulset labels: app: postgres spec: serviceName: "postgresql-headless-svc" replicas: 1 selector: matchLabels: app: postgres template: metadata: labels: app: postgres spec: containers: - name: postgres image: postgres:17.2 envFrom: - secretRef: name: postgresql-secret ports: - containerPort: 5432 name: postgresdb volumeMounts: - name: pv-data mountPath: /var/lib/postgresql/db volumes: - name: pv-data persistentVolumeClaim: claimName: postgresql-local-pvc Crie o Secret com as credenciais: kubectl create secret generic postgresql-secret --from-literal=POSTGRES_PASSWORD=Ze4hahshez6dop9vaing kubectl apply -f postgres-statefulset.yaml Se o pod permanecer em Pending, crie uma StorageClass: kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: manual provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer Verifique detalhes e erros: kubectl describe pod postgres-statefulset-0 Crie um Headless Service para acesso interno — arquivo postgres-service.yaml: apiVersion: v1 kind: Service metadata: name: postgresql-headless-svc spec: type: ClusterIP selector: app: postgres ports: - port: 5432 targetPort: 5432 clusterIP: None Teste a conexão: kubectl run tutorial-db-postgresql-client --rm --tty -i --restart='Never' \ --image docker.io/bitnami/postgresql:17.2.0-debian-12-r6 \ --env="PGPASSWORD=Ze4hahshez6dop9vaing" \ --command -- psql --host postgres-statefulset-0.postgresql-headless-svc \ -U postgres -p 5432 Escalabilidade, replicação e backup Escalar o StatefulSet: kubectl scale statefulset postgres-statefulset --replicas=3  Cada pod pode ser acessado via o serviço headless, por exemplo:postgres-statefulset-1.postgresql-headless-svc. Backup: utilize um CronJob executando a ferramenta pg_dump. Também é possível usar VolumeSnapshots para maior segurança. Boas práticas Requests e Limits: defina limites adequados de CPU e memória. Backups regulares: use CronJobs e snapshots. Monitoramento e logs: use Prometheus e Grafana para monitorar métricas como desempenho de consultas, uso de disco e status de replicação. Pod Disruption Budgets (PDBs): evite que muitos pods PostgreSQL sejam interrompidos simultaneamente durante atualizações. Choose your server now! Conclusão O Helm Chart é a forma recomendada para implantações complexas e ambientes de produção. O Helm automatiza o controle de versões e simplifica a configuração dos componentes Kubernetes. Com o comando helm template, é possível gerar os manifests YAML localmente e ajustá-los conforme necessário. O Kubernetes oferece escalabilidade, flexibilidade e automação para bancos de dados PostgreSQL. Usando StatefulSets, PVCs, PDBs e gestão de Secrets, você garante uma implantação de PostgreSQL pronta para produção — segura, confiável e altamente disponível.
27 October 2025 · 7 min to read

Tem perguntas,
comentários ou preocupações?

Nossos profissionais estão disponíveis para ajudá-lo a qualquer momento,
seja para assistência ou apenas se você não souber por onde começar.
Envie-nos um e-mail
Hostman's Support