Fazer upgrade para uma nova versão principal
Databases for PostgreSQL oferece três opções diferentes de atualização:
- Atualização no local para uma nova versão principal.
- Restaurando a partir do backup.
- Atualização a partir de uma réplica somente leitura.
Quando uma versão principal de um banco de dados está se aproximando do fim de sua vida útil (EOL), é recomendável atualizá-la para uma versão principal mais recente.
Encontre as versões disponíveis do Databases for PostgreSQL na página do catálogo IBM Cloud, por meio do comando do plug-in da CLI do Cloud Databases ibmcloud cdb deployables-showou no endpoint da API do Cloud Databases /deployables.
Ao atualizar para uma nova instância, você também precisará alterar as informações de conexão em seu aplicativo.
Nos comandos de exemplo a seguir, é necessário informar o CRN completo da instância do banco de dados para o comando {id}. Como o CRN contém caracteres especiais, ele deve ser codificado com o formato “ URL ” para evitar
um erro “not_found”.
Requisitos para atualizar para uma versão principal mais recente do PostgreSQL
Antes de iniciar qualquer processo de atualização para uma versão principal, verifique todas as extensões, objetos de replicação e dependências de aplicativos que precisam ser mantidos em primeiro lugar.
Algumas extensões e objetos de replicação lógica são específicos de uma versão ou dependem de componentes do lado do servidor que devem corresponder à versão principal do PostgreSQL. Removê-los antes da atualização ajuda a evitar falhas e permite que você recrie apenas os objetos compatíveis depois que a nova versão estiver em funcionamento.
Extensões e objetos de replicação lógica a serem analisados
Verifique os itens a seguir antes da atualização:
Extensões
pg_repackold_snapshotwal2jsonanonPostGIS
Slots de replicação
Logical replication slots
Dependências das aplicações Se você remover extensões ou objetos de replicação dos quais suas aplicações dependem, verifique os fluxos de dados e o comportamento das aplicações antes de prosseguir com a atualização. Leve também em consideração possíveis interrupções na lógica do seu aplicativo que dependa de recursos específicos do PostgreSQL.
pg_repack
Exclua o diretório pg_repack antes da atualização e recrie-o após a atualização. O pg_repack utiliza uma extensão específica para cada versão e componentes cliente/servidor que devem corresponder à versão principal
do PostgreSQL.
DROP EXTENSION pg_repack;
Recrie a extensão após a atualização somente se sua carga de trabalho ainda precisar dela.
CREATE EXTENSION pg_repack;
old_snapshot
Exclua o arquivo “ old_snapshot ” antes da atualização. Não o recrie após a atualização para o PostgreSQL 18, pois ele não é mais compatível.
DROP EXTENSION old_snapshot;
wal2json slots de replicação
Se você utilizar o wal2json para a decodificação lógica, é necessário excluir todos os slots de replicação associados antes da atualização. O utilitário pg_upgrade proíbe estritamente
atualizações de versão principal enquanto houver slots de replicação e, nesse caso, gerará um erro crítico e interromperá a atualização.
Antes da atualização:
- Certifique-se de que todos os dados pendentes do WAL tenham sido processados.
- Encerre o aplicativo que utiliza o slot de replicação.
- Excluir o(s) slot(s) de replicação:
SELECT pg_drop_replication_slot('your_slot_name');
Após a atualização, você poderá recriar os slots de replicação conforme necessário. Observe que o wal2json não é instalado por meio de CREATE EXTENSION , mas é configurado por meio de
parâmetros do banco de dados (wal_level, max_replication_slots, max_wal_senders) e permissões de tabela, o que não impede as atualizações.
anon
Remova a extensão “ anon ” antes da atualização e reative-a após a atualização, caso ainda precise dela. São necessárias etapas adicionais antes de desinstalar o anon.
Se a extensão “ anon ” estiver instalada, siga as etapas abaixo e execute os comandos como usuário administrador antes de realizar a atualização.
-
Remova todas as regras de máscara (se estiverem ativadas).
SELECT anon.remove_masks_for_all_columns(); -
Desative as funções mascaradas (a atualização pode falhar se alguma função estiver marcada como mascarada).
SECURITY LABEL FOR anon ON ROLE <role_name> IS NULL; -
Desative a extensão
anoncom a opçãocascade.DROP EXTENSION anon CASCADE; -
Se a extensão “
anon” estiver instalada em vários bancos de dados dentro de uma instância, siga as etapas descritas para cada banco de dados. -
Após a conclusão da atualização, reative a extensão “
anon” e reaplique as regras de mascaramento conforme necessário.
Recomenda-se enfaticamente validar os dados tanto antes quanto depois de remover a extensão, a fim de garantir a consistência do mascaramento antes de realizar a atualização.
PostGIS
Se você estiver usando o PostGIS,, atualize primeiro o PostGIS antes de atualizar o PostgreSQL.
SELECT postgis_extensions_upgrade();
Use a consulta a seguir para validar a atualização da extensão “ PostGIS ”.
SELECT postgis_full_version();
Logical replication slots
Exclua todos os slots de replicação lógica antes da atualização e recrie-os após a atualização. Os slots lógicos estão vinculados ao estado do servidor de origem e devem ser recriados do zero na instância atualizada.
SELECT pg_drop_replication_slot('<slot_name>');
Atualizações de versão principal sem remoção do sistema
Uma atualização de versão principal no local (IPU) permite que você atualize sua implantação para uma versão compatível /docs/databases-for-postgresql?topic=databases-for-postgresql-versioning-policy#version-definitions sem precisar restaurar um backup em uma nova implantação. A atualização mantém as cadeias de conexão existentes, portanto, não é necessária nenhuma reconfiguração.
No entanto, pode ser necessário fazer alterações no aplicativo caso a nova versão apresente diferenças de compatibilidade.
Durante o período de atualização, sua implantação fica indisponível por um breve período. A duração depende do tamanho e da complexidade da sua implantação.
Se suas aplicações precisarem continuar lendo dados durante a atualização, você pode provisionar uma réplica somente leitura em /docs/databases-for-postgresql?topic=databases-for-postgresql-read-only-replicas&interface=ui#read-only-replicas-provision e atualizar sua aplicação para usar essa réplica. Você pode promover a réplica a primária caso a atualização não seja concluída com sucesso. Para obter mais informações, consulte /docs/databases-for-postgresql?topic=databases-for-postgresql-read-only-replicas&interface=ui#read-only-replicas-ipu.
Databases for PostgreSQL não cria backups automaticamente antes ou depois de uma atualização de versão principal no próprio sistema.
Para melhorar a recuperabilidade, crie:
- Um backup antes da atualização para proteger o estado atual dos seus dados
- Um backup imediatamente após a atualização, para estabelecer o primeiro ponto de restauração da nova versão
Se você não fizer um backup após a atualização, a recuperação em um momento específico (PITR) não estará disponível para a nova versão até que o próximo backup programado seja concluído.
Os backups e os pontos PITR criados antes da atualização permanecem associados à versão anterior e não podem ser restaurados na versão atualizada. No entanto, elas ainda podem ser usadas para restaurar a versão anterior em uma nova implantação.
Slots de replicação lógica
Exclua todos os slots de replicação lógica antes da atualização e recrie-os depois. Os slots de replicação lógica estão vinculados ao estado do servidor de origem e devem ser recriados na instância atualizada.
SELECT pg_drop_replication_slot('<slot_name>');
Antes de Iniciar
Verifique o seguinte antes de iniciar a atualização:
-
Verifique se as atualizações de versão são compatíveis com sua implantação usando a interface do usuário, a API, a CLI ou o Terraform.
Exemplo (CLI):
ibmcloud cdb capability-show versions postgresql -
Verifique os requisitos de pré-verificação. A atualização é executada na implantação de origem e é bloqueada caso sejam detectados riscos. Certifique-se de que:
- A implantação está em boas condições
- Há pelo menos 10% de espaço livre em disco disponível
- A utilização de E/S está abaixo de 90%
- O tamanho do esquema e o número de objetos estão dentro dos limites permitidos
- A limpeza necessária da extensão e do slot de replicação lógica foi concluída
-
Consulte o Guia de Compatibilidade do Windows Server 2012 ( https://www.postgresql.org/docs/release/ ) para verificar se há alterações de compatibilidade que possam afetar seus aplicativos.
-
O retrocesso para uma versão anterior não é compatível.
-
Uma atualização no local não pode ser cancelada depois de iniciada.
-
Certifique-se de que haja um backup recente disponível antes de fazer a atualização.
| Fonte: versão do PostgreSQL | Destino compatível com atualização no local |
|---|---|
| 18 | Próximas versões principais (quando estiverem disponíveis) |
Gen2 começa com “ PostgreSQL ” 18. As rotas de atualização para versões mais recentes são adicionadas à medida que passam a ser compatíveis. Para versões anteriores (14–17), consulte /docs/databases-for-postgresql?topic=databases-for-postgresql-upgrading.
Após a conclusão da atualização, sua implantação será executada em uma nova versão principal do PostgreSQL. Os backups e os pontos PITR anteriores à atualização pertencem à linha do tempo da versão anterior e não podem ser restaurados na versão atualizada.
Para manter os recursos de restauração e PITR na nova versão, faça um backup imediatamente após a atualização. Esse backup passa a ser a base para futuras operações de recuperação.
Caso a atualização falhe, os backups feitos antes da atualização ainda podem ser usados com o PITR para restaurar a versão anterior em uma nova implantação.
Fazendo upgrade na IU
-
Crie uma implantação de teste restaurando um backup da sua implantação existente com a mesma versão.
-
Atualize seu aplicativo de teste para usar a implantação de teste e valide a funcionalidade.
-
Inicie a atualização na página “Visão geral ” clicando em “Atualizar versão principal ”.
-
Valide o comportamento do aplicativo na implantação de teste atualizada.
-
Atualize sua implantação de produção após a conclusão da validação.
Depois que a atualização for iniciada, ela não poderá ser interrompida nem revertida. Certifique-se de que haja um backup recente disponível.
O prazo para o início da atualização define quanto tempo a tarefa de atualização deve começar antes de ser cancelada automaticamente. Defina esse valor de acordo com sua janela de manutenção. Por exemplo, se a atualização levar 30 minutos e o seu intervalo for de 1 hora, defina o prazo de validade para 30 minutos. O prazo de validade pode variar entre 5 minutos e 24 horas.
Fazendo upgrade por meio da API
Use a seguinte solicitação para iniciar uma atualização no local:
curl -X PATCH https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/version \
-H 'Authorization: Bearer <>' \
-H 'Content-Type: application/json' \
-d '{"version": "15"}'
Para obter mais informações, consulte a API do Cloud Databases.
Fazendo upgrade por meio da CLI
Disponível na versão do plug-in CDB >= 0.20.0.
Para visualizar as opções de atualização disponíveis:
ibmcloud cdb deployment-capability-show <NAME|CRN> versions
Para iniciar uma atualização:
ibmcloud cdb deployment-version-upgrade <NAME|CRN> <TARGET_VERSION>
Para obter detalhes sobre o comando:
ibmcloud cdb deployment-version-upgrade --help
Use --expire-in ou --expire-at para definir o prazo de validade.
Atualização por meio do Terraform
Disponível na versão do provedor do Terraform >= 1.79.2.
Para fazer o upgrade, atualize o valor de version na sua configuração.
Deixar de fazer um backup antes de uma atualização pode resultar em perda de dados caso a atualização falhe. Certifique-se de que haja um backup recente disponível.
Aumente o tempo limite, se necessário, pois o Terraform utiliza tempos limite em vez de carimbos de data e hora de validade.
Resolução de problemas
Caso surjam problemas após uma atualização bem-sucedida e você precise voltar à versão anterior, entre em contato com o suporte do IBM Cloud® para obter orientação. Evite realizar PITR ou restaurações sem orientação, pois isso pode complicar a recuperação.
As atualizações só são executadas depois que todas as verificações prévias forem aprovadas. Se a atualização estiver bloqueada, verifique:
- Integridade do cluster (o estado do Patroni está estável)
- Espaço livre suficiente no disco
- Utilização aceitável de E/S de disco
- Limites de tamanho do esquema e de número de objetos
Esquemas grandes e um número elevado de objetos podem aumentar a duração da atualização.
Se as tentativas de atualização continuarem falhando, abra um ticket de suporte pelo site https://cloud.ibm.com/login?redirect=%2Funifiedsupport%2Fsupportcenter.
Fazendo upgrade por meio de uma réplica somente leitura
Faça a atualização configurando uma réplica somente leitura. Crie uma réplica somente leitura com a mesma versão do banco de dados da sua implantação
e aguarde até que ela replique todos os seus dados. Quando sua implantação e sua réplica estiverem sincronizadas, promova e atualize a réplica somente leitura para uma implantação completa e autônoma que execute a nova versão do banco de dados.
Para realizar a etapa de atualização e promoção, utilize uma solicitação POST para o /deployments/{id}/remotes/promotion ponto de extremidade com a versão
para a qual você deseja atualizar no corpo da solicitação.
Essa solicitação tem o seguinte formato:
curl -X POST \
https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/remotes/promotion \
-H 'Authorization: Bearer <>' \
-H 'Content-Type: application/json' \
-d '{
"promotion": {
"version": "14",
"skip_initial_backup": false
}
}' \
skip_initial_backup é opcional. Se configurado como true, a nova implementação não fará um backup inicial quando a promoção for concluída. Sua nova implementação é disponibilizada em menos tempo, mas o backup dela não
ocorre até a execução do próximo backup automático ou da realização de um sob demanda.
Simulando a promoção e o upgrade
Para avaliar os efeitos das atualizações de versão principais, execute um teste simulado. Um teste simula a promoção e a atualização, com os resultados registrados nos logs do banco de dados. Acesse e visualize os logs do seu banco de dados por meio da integração de análise de logs. Isso garante que a versão que você está executando no momento, juntamente com suas extensões, possa ser atualizada com sucesso para a versão desejada.
A simulação deve ser executada com skip_initial_backup configurado como false e version definida.
O comando é o seguinte:
curl -X POST \
https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/remotes/promotion \
-H 'Authorization: Bearer <>' \
-H 'Content-Type: application/json' \
-d '{
"promotion": {
"version": "14",
"skip_initial_backup": false,
"dry_run": true
}
}' \
Backup e restauração da atualização
Você pode atualizar a versão do seu banco de dados restaurando um backup dos seus dados em uma nova instância que esteja executando a nova versão do banco de dados.
Fazendo upgrade na IU
Atualize para uma nova versão ao restaurar um backup a partir do menu “Backups” do seu painel de implantação. Clique em “Restaurar” em um backup para acessar a página de provisionamento em uma nova aba, onde você poderá alterar algumas opções para a nova implantação. Uma das opções é a versão do banco de dados, que é preenchida automaticamente com as versões disponíveis para você atualizar. Selecione uma versão e clique em “Criar” para iniciar o processo de provisionamento e restauração.
Fazendo upgrade por meio da CLI
Para atualizar e restaurar a partir de um backup por meio da CLI do IBM Cloud, use o comando de provisionamento no controlador de recursos.
ibmcloud resource service-instance-create <DEPLOYMENT_NAME_OR_CRN> <SERVICE_ID> <SERVICE_PLAN_ID> <REGION>
Os parâmetros service-name, service-id, service-plan-id e region são todos necessários. Você também fornece o -p com a versão e os parâmetros de ID de backup em um objeto JSON.
A nova implementação é dimensionada automaticamente com o mesmo disco e a memória que a implementação de origem no momento do backup.
Este comando é semelhante a:
ibmcloud resource service-instance-create example-upgrade databases-for-postgresql standard us-south \
-p \ '{
"backup_id": "crn:v1:bluemix:public:databases-for-postgresql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71717:backup:06392e97-df90-46d8-98e8-cb67e9e0a8e6",
"version":14
}'
Fazendo upgrade por meio da API
Siga as etapas necessárias para utilizar a API do controlador de recursos antes de usá-la para fazer a atualização a partir
de um backup. Em seguida, envie à API uma solicitação do tipo “ POST ”. Os parâmetros name, target, resource_group e resource_plan_id são todos necessários. Você também fornece
a versão e o ID de backup. A nova implementação tem a mesma alocação de memória e de disco que a implementação de origem no momento do backup.
Este comando é semelhante a:
curl -X POST \
https://resource-controller.cloud.ibm.com/v2/resource_instances \
-H 'Authorization: Bearer <>' \
-H 'Content-Type: application/json' \
-d '{
"name": "my-instance",
"target": "bluemix-us-south",
"resource_group": "5g9f447903254bb58972a2f3f5a4c711",
"resource_plan_id": "databases-for-postgresql-standard",
"backup_id": "crn:v1:bluemix:public:databases-for-postgresql:us-south:a/54e8ffe85dcedf470db5b5ee6ac4a8d8:1b8f53db-fc2d-4e24-8470-f82b15c71717:backup:06392e97-df90-46d8-98e8-cb67e9e0a8e6",
"version":14
}'
Atualização forçada
Após a data de fim de vida útil, todas as implantações ativas do Databases for PostgreSQL que executam uma versão obsoleta são automaticamente atualizadas para a próxima versão suportada. Por exemplo, o PostgreSQL 13 (obsoleto) é atualizado para a versão 14.
Faça a atualização antes da data de fim de vida útil para evitar os seguintes riscos:
- Não há SLAs previstos para esse tipo de atualização forçada.
- Pode ocorrer alguma perda de dados.
- Seu aplicativo pode ficar fora do ar por um período prolongado.
- Seu aplicativo pode deixar de funcionar caso seja incompatível com a nova versão.
- Você não pode controlar o momento em que essa atualização ocorrerá na sua implantação.
- Não há processo de reversão para essa atualização forçada.
Para saber as datas de fim de vida útil, consulte a página de política de versões.
Problemas com privilégios de funções durante atualizações de versão
A partir do PostgreSQL 16, a aplicação de privilégios de função tornou-se mais rigorosa. Trata-se de uma mudança arquitetônica no upstream do PostgreSQL, e não de uma mudança de comportamento específica do IBM®. Nas versões anteriores, as funções
com o atributo “ CREATEROLE ” podiam gerenciar outras funções de forma mais ampla. No PostgreSQL 16 e versões posteriores, uma função deve ter a permissão “ ADMIN OPTION ” sobre outra função para poder concedê-la
ou revogá-la. Para obter mais informações, consulte as notas de lançamento do PostgreSQL 16, os atributos de funções e GRANT sobre funções.
Se você estiver atualizando d PostgreSQL e 15 ou versão anterior para o PostgreSQL e 16 ou versão posterior, verifique as concessões de funções antes de iniciar a atualização no local (IPU). Se for necessário continuar a gerenciamento de funções após a atualização, certifique-se de que as funções necessárias sejam concedidas com a opção WITH ADMIN OPTION antes de iniciar a atualização.
Se você encontrar erros relacionados a privilégios após a atualização, por exemplo:
ERROR: only roles with the ADMIN OPTION on role "some_role" may grant this role
DETAIL: role "admin" is not permitted to grant role "some_role"
Use a função auxiliar integrada grant_admin_option_to_roles para restaurar ADMIN OPTION para funções específicas:
- Aplica-se apenas a bancos de dados atualizados do PostgreSQL v15 e versões anteriores para o PostgreSQL 16 e versões posteriores (caso você esteja enfrentando o erro descrito acima).
- Aceita uma lista arbitrária de funções às quais aplicar a correção.
- Só pode ser executado pelo
admin user. - É seguro executá-la várias vezes (idempotente).
Amostra de uso:
SELECT grant_admin_option_to_roles('role1', 'role2', 'role3');
Esta função concede as funções especificadas (role1, role2, role3) ao usuário admin com ADMIN OPTION, permitindo que o usuário admin gerencie (conceda, revogue, altere
ou elimine) essas funções em instâncias atualizadas.
Log de mudanças para versões principais do PostgreSQL
Para obter informações sobre versões anteriores do PostgreSQL (14 a 17), consulte o site Gen1 registro de alterações.