Login
Login

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
Technical writer
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