Use o método de upgrade in-place para fazer upgrade da versão principal do engine de uma instância ApsaraDB RDS for PostgreSQL diretamente na instância existente, com o pg_upgrade. Todos os metadados, incluindo informações de configuração e faturamento, são preservados após o upgrade.
Para comparar todos os métodos de upgrade disponíveis, consulte Introdução aos métodos de upgrade de versão principal.
Pré-requisitos
Antes de começar, verifique se:
A instância executa ApsaraDB RDS for PostgreSQL 16 ou uma versão anterior.
O tipo de armazenamento é disco em nuvem.
O método de faturamento é pagamento conforme o uso ou assinatura.
A instância não é uma instância somente leitura nem uma instância de cluster dedicado.
O Babelfish não está ativo. O número da versão secundária do engine não termina com
babelfish.
Instâncias com discos locais de alto desempenho e instâncias serverless não são compatíveis com o método de upgrade in-place. Use o
método de implantação blue-green
como alternativa.
Faturamento
Gratuito.
Considerações de uso
Leia as informações a seguir antes de iniciar o upgrade.
Impacto no serviço
Durante a alternância, a instância entra em estado somente leitura e pode ocorrer uma interrupção de conexão transitória de alguns minutos. Execute o upgrade durante horários de baixo tráfego.
A duração do estado somente leitura depende do número de objetos do banco de dados. Execute o seguinte comando para verificar a contagem:
SELECT count(1) FROM pg_class;
Se a contagem for da ordem de milhões, o estado somente leitura pode durar dezenas de minutos ou até horas.
Caso o tipo de instância não atenda às especificações recomendadas, o sistema faz o upgrade automaticamente durante o upgrade de versão. Isso provoca um estado somente leitura adicional de alguns minutos e uma interrupção de conexão transitória de alguns segundos. Resolva todos os alertas de tipo de instância no relatório de verificação de upgrade de versão principal antes de prosseguir.
Slots de replicação
Se a instância for um publicador com slots de replicação, esses slots serão perdidos após o upgrade.
Se a instância for um assinante com slots de replicação, pode ocorrer uma preempção de slot de replicação durante o upgrade, causando inconsistência de dados. Consulte Como evitar inconsistência de dados causada por preempção de slot de replicação durante um upgrade?
Alterações de parâmetros
Parâmetros não compatíveis com a versão de destino são excluídos automaticamente.
Parâmetros com valores fora do intervalo válido para a versão de destino são redefinidos para o valor padrão do modelo de parâmetros dessa versão.
O sistema defina temporariamente
statement_timeoutcomo0durante o upgrade e restaura o valor original após a conclusão.
Outras considerações
Tarefas DTS: se a instância for origem ou destino do Data Transmission Service (DTS), recrie a tarefa DTS após o upgrade.
Compatibilidade de plugins: o upgrade atualize automaticamente a instância para a versão secundária mais recente do engine, o que pode causar problemas de compatibilidade com plugins.
Backup da instância: um backup completo é feito antes e após o upgrade para permitir a recuperação baseada em clone.
Etapa 1: Execute uma verificação pré-upgrade
Acesse o console do ApsaraDB RDS. Na barra de navegação superior, selecione a região onde a instância está localizada. Localize e clique em no ID da instância.
-
(Opcional) Se a instância tiver instâncias somente leitura, altere o endpoint da aplicação do endpoint da instância somente leitura para o endpoint da instância primária e exclua as instâncias somente leitura.
NotaAltere o endpoint da aplicação durante horários de baixo tráfego para minimizar o impacto no serviço.
-
No painel de navegação à esquerda, clique em Major Version Upgrade.
NotaSe
Major Version Upgrade
não aparecer, verifique a versão e a configuração da instância. Para mais informações, consulte
.
Na aba Upgrade Check, clique em Create upgrade check report.
Selecione a versão de destino, defina Upgrade Mode como Local Upgrade e clique em OK. O status da instância muda para Maintaining Instance enquanto a verificação é executada e retorna a Running quando a verificação é concluída.
-
Analise os resultados da verificação:
Success ou Warning: prossiga para a Etapa 2.
Failed: clique em View Information, corrija os problemas identificados no relatório e execute a verificação novamente. Para detalhes sobre erros comuns, consulte Interpretar o relatório de verificação de upgrade de versão principal do ApsaraDB RDS for PostgreSQL.
ImportanteSe o resultado for Warning, corrija os problemas e execute a verificação novamente até que o resultado seja Success. - Caso crie um plugin na instância primária após a verificação ser bem-sucedida, execute a verificação novamente.
Etapa 2: Faça o upgrade da versão principal do engine
Clique na aba Upgrade Instance. Leia os avisos, selecione a versão de upgrade e clique em Create Upgrade Task.
Na caixa de diálogo, leia o aviso e clique em OK.
-
Na seção Create Major Engine Version Upgrade Task, defina Upgrade Mode como Local Upgrade e configure Cutover time:
immediately: a alternância ocorre imediatamente após a conclusão da migração.
Instance operation and maintenance time: a alternância ocorre dentro da janela de manutenção configurada.
-
Clique em Create now. O status da instância muda para Migration in Progress quando a tarefa de upgrade é iniciada. A duração varia conforme o número de objetos do banco de dados. Acompanhe o progresso no Task Hub.
ImportanteTarefas de upgrade não podem ser modificadas ou excluídas após a criação. - Enquanto a instância estiver em Migration in Progress, operações como modificar parâmetros, reiniciar ou liberar a instância ficam indisponíveis.
-
O upgrade está concluído quando a instância de source e a de destino exibem o status Running.
NotaNa aba
Upgrade History
, clique em
View Information
na coluna
Upgrade Log
para visualize a duração do estado somente leitura e o log detalhado do upgrade. A duração do estado somente leitura corresponde ao intervalo entre
Cutover Time
e
Cutover End Time
, excluindo o período de liberação do cache DNS.
Próximos passos
Se você excluiu instâncias somente leitura antes do upgrade:
Crie instâncias somente leitura na instância de destino.
Na aplicação, atualize o endpoint para apontar para a nova instância somente leitura.
Referência de resultados de upgrade
A coluna Upgrade Result na aba Upgrade History exibe um dos seguintes status:
|
Upgrade result |
Instance status |
Significado |
|
Running |
Migration in Progress |
A tarefa de upgrade está em execução. |
|
Succeeded |
Running |
A tarefa de upgrade foi concluída com êxito. |
Referência de API
|
Operação de API |
Descrição |
|
Executa uma verificação pré-upgrade para um upgrade de versão principal do engine. |
|
|
Consulta o relatório de verificação pré-upgrade. |
|
|
Faz o upgrade da versão principal do engine. |
|
|
Consulta o histórico de tarefas de upgrade de versão principal do engine. |
Referências
Perguntas frequentes
Posso modificar a instância durante um upgrade de versão principal do engine?
Não. Aguarde a conclusão do upgrade antes de fazer alterações na instância.
Upgrades automáticos de versão principal do engine são compatíveis?
Não. Os upgrades de versão principal do engine devem ser iniciados manualmente.
Downgrades de versão principal do engine são compatíveis?
Não. Para execute uma versão inferior, adquira uma nova instância na versão desejada e use o DTS para migrar os dados.
Após o upgrade, recebo um erro de conflito de raster_overviews ao crie uma view. Como resolver?
Esse problema afeta versões do PostGIS anteriores à 2.5.2 no PostgreSQL 10 ou 11 ao fazer upgrade para o PostgreSQL 12. Siga estas etapas:
-
Na instância de source, faça o upgrade do plugin PostGIS. Execute o seguinte comando duas vezes para garantir que ele seja concluído com êxito:
SELECT PostGIS_Extensions_Upgrade(); SELECT PostGIS_Extensions_Upgrade(); Escolha a correção com base no uso ou não do plugin PostGIS Raster.
Se você usa o PostGIS Raster:
-
Na instância de source, remova a view
raster_overviewsda extensão e substitua-a por um placeholder:ALTER EXTENSION PostGIS_Raster DROP VIEW raster_overviews; CREATE OR REPLACE VIEW raster_overviews AS SELECT 1; Faça o upgrade da instância PostgreSQL para pelo menos o PostgreSQL 12.
-
Na instância de destino, recrie a view completa e adicione-a de volta à extensão:
CREATE OR REPLACE VIEW raster_overviews AS SELECT current_database() AS o_table_catalog, n.nspname AS o_table_schema, c.relname AS o_table_name, a.attname AS o_raster_column, current_database() AS r_table_catalog, split_part(split_part(s.consrc, '''::name', 1), '''', 2)::name AS r_table_schema, split_part(split_part(s.consrc, '''::name', 2), '''', 2)::name AS r_table_name, split_part(split_part(s.consrc, '''::name', 3), '''', 2)::name AS r_raster_column, trim(both from split_part(s.consrc, ',', 2))::integer AS overview_factor FROM pg_class c, pg_attribute a, pg_type t, pg_namespace n, ( SELECT connamespace, conrelid, conkey, pg_get_constraintdef(oid) AS consrc FROM pg_constraint ) AS s WHERE t.typname = 'raster'::name AND a.attisdropped = false AND a.atttypid = t.oid AND a.attrelid = c.oid AND c.relnamespace = n.oid AND c.relkind = ANY(ARRAY['r'::char, 'v'::char, 'm'::char, 'f'::char]) AND s.connamespace = n.oid AND s.conrelid = c.oid AND s.consrc LIKE '%_overview_constraint(%' AND NOT pg_is_other_temp_schema(c.relnamespace) AND has_table_privilege(c.oid, 'SELECT'::text); ALTER EXTENSION PostGIS_Raster ADD VIEW raster_overviews;
Se você não usa o PostGIS Raster:
-
Na instância de source, remova a extensão:
DROP EXTENSION PostGIS_Raster; Faça o upgrade da instância PostgreSQL para pelo menos o PostgreSQL 12.
Como evitar inconsistência de dados causada por preempção de slot de replicação durante um upgrade?
Escolha uma das abordagens a seguir com base em onde os dados da assinatura devem residir após o upgrade.
Manter os dados da assinatura na instância de source:
Certifique-se de que a instância de source não fique indisponível por carga excessiva durante o upgrade. Se isso ocorrer, o slot de replicação pode ser preemptado pela instância de destino, causando inconsistência de dados. Após o upgrade, desative a assinatura no banco de dados de destino:
\c your_database
ALTER SUBSCRIPTION your_subscription_name DISABLE;
Mover os dados da assinatura para a instância de destino:
Antes do upgrade, desative a assinatura na instância de source:
\c your_database
ALTER SUBSCRIPTION your_subscription_name DISABLE;
Após o upgrade, ative a assinatura na instância de destino:
\c your_database
ALTER SUBSCRIPTION your_subscription_name ENABLE;
Para mais informações sobre slots de replicação, consulte
e
. Caso tenha ignorado essas etapas, consulte a próxima pergunta frequente para saber como corrigir a inconsistência de dados na assinatura.
Como corrigir inconsistência de dados na assinatura após um upgrade?
Na instância de destino (versão superior), exclua os dados da tabela afetada. Em seguida, recrie a assinatura com
copy_data=true. Para detalhes, consulte ALTER SUBSCRIPTION.-
Use
ON CONFLICTpara importar os dados da instância de source (versão inferior) para a de destino. O exemplo a seguir ilustra o padrão:CREATE TABLE my_tbl(id INT PRIMARY KEY, t TIMESTAMP, val TEXT); INSERT INTO my_tbl VALUES (1, CURRENT_TIMESTAMP, 'a'); INSERT INTO my_tbl VALUES (2, CURRENT_TIMESTAMP, 'b'); INSERT INTO my_tbl VALUES (3, CURRENT_TIMESTAMP, 'c'); -- Newer timestamp: update the existing row INSERT INTO my_tbl VALUES (1, CURRENT_TIMESTAMP, 'd') ON CONFLICT(id) DO UPDATE SET t = excluded.t, val = excluded.val WHERE my_tbl.t < excluded.t; -- Older timestamp: skip the row INSERT INTO my_tbl VALUES (2, CURRENT_TIMESTAMP - '10 hours'::interval, 'e') ON CONFLICT(id) DO UPDATE SET t = excluded.t, val = excluded.val WHERE my_tbl.t < excluded.t; -- New row: insert INSERT INTO my_tbl VALUES (5, CURRENT_TIMESTAMP - '10 hours'::interval, 'f') ON CONFLICT(id) DO UPDATE SET t = excluded.t, val = excluded.val WHERE my_tbl.t < excluded.t;
Por que é necessário exclua instâncias somente leitura antes de um upgrade de versão principal do engine?
Os nós somente leitura e seus slots de replicação permanecem vinculados à instância de source após o upgrade e não são transferidos automaticamente para a instância de destino. Exclua-os antes do upgrade e recrie-os na instância de destino após a conclusão.