Todos os produtos
Search
Central de documentação

ApsaraDB RDS:Upgrade a major version using zero-downtime mode

Última atualização: Aug 20, 2026

Use o modo de tempo de inatividade zero para atualizar a versão principal do mecanismo de uma instância ApsaraDB RDS for PostgreSQL e manter o banco de dados totalmente operacional. A instância aceita leituras e gravações durante todo o processo. No switchover final, ela entra em modo somente leitura por apenas alguns segundos. A duração exata depende da quantidade de sequences e do volume de gravações de transações grandes.

Para outras abordagens de atualização, consulte Introduction to major version upgrade solutions.

Como funciona

O modo de tempo de inatividade zero executa o pg_upgrade para atualizar um snapshot da instância para a versão de destino. Em seguida, usa replicação lógica nativa para sincronizar alterações incrementais da source. Verifique a instância de destino antes de acionar o switchover. Ao iniciar o switchover, a instância fica somente leitura brevemente enquanto as sequences são sincronizadas. Depois, o tráfego é direcionado para a nova versão.

Faturamento

Gratuito.

Pré-requisitos

Antes de começar, certifique-se de que:

  • A instância executa o ApsaraDB RDS for PostgreSQL 16 ou uma versão anterior.

  • O tipo de armazenamento é disco cloud. Instâncias com discos locais de alto desempenho só podem usar o blue-green deployment mode.

  • O método de faturamento é pagamento conforme o uso ou assinatura. Instâncias Serverless só podem usar o blue-green deployment mode.

  • A instância não é uma read-only instance nem uma dedicated cluster instance.

  • O parâmetro wal_level está definido como logical. As atualizações com tempo de inatividade zero dependem de replicação lógica. Portanto, se o wal_level estiver como replica ou minimal, a verificação pré-atualização falhará. Caso contrário, modify the instance parameters antes de prosseguir.

  • O Babelfish não está ativado. O número da versão secundária do mecanismo não deve terminar com babelfish.

Observações de uso

Revise os pontos abaixo antes de iniciar a atualização.

Impacto nos negócios

Operações DDL (Data Definition Language) são proibidas desde o início da atualização até a conclusão do switchover. O tempo de inatividade da instância de source é medido em segundos e varia conforme a quantidade de sequences e o volume de gravações de transações grandes.

Slots de replicação

  • Caso a instância de source possua uma publicação (extremidade publicadora de um slot de replicação), esse slot será perdido após a atualização.

  • Se a instância de source tiver um assinante (extremidade assinante de um slot de replicação), a atualização pode causar problemas de sincronização de dados devido à preempção do slot. Consulte a seção de FAQ para mais detalhes.

Alterações de parâmetros

  • Parâmetros não suportados pela versão de destino são excluídos automaticamente.

  • Parâmetros cujos valores estejam fora do intervalo válido para a versão de destino são redefinidos para os valores padrão do modelo de parâmetros dessa versão.

  • O statement_timeout é temporariamente definido como 0 durante a atualização e restaurado ao valor original posteriormente.

Tarefas do DTS

Se a instância for source ou destino do Data Transmission Service (DTS), recreate the DTS task após a atualização.

Compatibilidade de plugins

A atualização leva a instância automaticamente à versão secundária mais recente do mecanismo, o que pode gerar problemas de compatibilidade com plugins.

Backups

Um backup completo é realizado antes e depois da atualização para permitir recuperação baseada em clone.

Impacto nas diferentes etapas da atualização

Etapa da atualização

Impacto

Início da atualização de versão principal

Operações DDL são proibidas.

Criação de slots de replicação e publicações

Operações DDL são proibidas. Logs WAL começam a acumular.

Início do assinante e estabelecimento da relação de replicação lógica

Operações DDL são proibidas. Logs WAL passam a ser consumidos e deixam de acumular. A replicação lógica gera carga de recursos diretamente relacionada ao número de bancos de dados e ao tráfego.

Início do switchover

Operações DDL são proibidas. A replicação lógica gera carga de recursos proporcional ao número de bancos de dados e ao tráfego. A instância fica somente leitura; a duração desse estado depende da quantidade de sequences.

Conclusão do switchover (atualização finalizada)

O slot de replicação lógica é excluído, eliminando a carga de recursos gerada por ele. A instância retoma as operações normais de leitura e gravação.

Após o início da tarefa de atualização, acesse a aba Upgrade History. Na coluna Upgrade Log da tarefa desejada, clique em View Information para visualizar o processo detalhado da atualização.

Etapa 1: Execute uma verificação pré-atualização

  1. Faça login no console do ApsaraDB RDS. Na barra de navegação superior, selecione a região onde a instância está localizada, encontre a instância e clique em seu ID.

  2. No painel de navegação à esquerda, clique em Major Version Upgrade.

    Se Major Version Upgrade não aparecer, verifique a versão e a configuração da sua instância. Para detalhes, consulte Prerequisites .
  3. Na aba Upgrade Check, clique em Create upgrade check report.

  4. Selecione a versão de destino, defina o Upgrade Mode como Zero Downtime e clique em OK. O status da instância mudará para Maintaining Instance. Após a conclusão da verificação, o status retornará para Running.

  5. Analise o resultado da verificação: Para ajuda na interpretação dos resultados, consulte Interpret an ApsaraDB RDS for PostgreSQL major version upgrade check report.

    • Success ou Warning: prossiga para a Etapa 2.

    • Failed: clique em View Information, corrija os problemas relatados e execute a verificação novamente.

    Importante
    • Se o resultado for Warning, corrija todos os problemas relatados e refaça a verificação até obter Success. - Se você criar um plugin na instância primária após uma verificação bem-sucedida, execute a verificação novamente antes de atualizar.

Etapa 2: Inicie a atualização

Antes de executar esta etapa, garanta que concluiu a Etapa 1: Execute uma verificação pré-atualização: na aba Upgrade Check, crie um relatório de verificação de atualização e confirme que o resultado é Success ou Warning antes de criar a tarefa de atualização.

  1. Clique na aba Upgrade Instance, leia os avisos, selecione uma versão em Select The Destination Version e clique em Create Upgrade Task.

  2. Na caixa de diálogo, leia o aviso e clique em OK.

  3. Na seção Create Major Engine Version Upgrade Task, defina o Upgrade Mode como Zero Downtime e clique em Create.

Quando o status da instância mudar para Migrating, a tarefa de atualização terá sido iniciada.

O tempo necessário depende da quantidade de objetos de banco de dados na instância — quanto mais objetos, maior a duração. Acompanhe o progresso em Task Hub.

Importante
  • Não é possível modificar ou excluir tarefas de atualização após a criação.

  • Enquanto a instância estiver no estado Migrating, tarefas de O&M (operações e manutenção), como modificar parâmetros, reiniciar ou liberar a instância, não são suportadas.

Etapa 3: Verifique e realize o switchover

Verifique a instância de destino

Quando o status da instância mudar de Migrating para Migrating Data Out, a replicação lógica estará estabelecida e a instância de destino estará pronta para verificação.

Acesse a aba Upgrade History e utilize a Later Version Verification URL do registro de atualização para conectar-se à instância de destino e verificar os dados.

A instância de destino permanece em modo somente leitura durante esta fase. Operações de gravação não são suportadas.

Faça o switchover para a nova versão

  1. Após confirmar que os dados atendem às expectativas e o Upgrade Result mostrar Synchronizing, clique em Switchover na coluna Upgrade Log.

    - Se o Upgrade Result mostrar um status diferente, consulte Upgrade result descriptions . - Para abandonar a atualização, clique em Cancel na coluna Upgrade Log . Isso exclui o slot de replicação lógica, remove a sobrecarga de replicação da instância de source e reativa as operações DDL.
  2. Na caixa de diálogo Switchover, defina a Write Downtime Tolerance (em segundos) e clique em OK. Essa configuração instrui o sistema a aguardar a compensação do atraso de replicação antes de concluir o switchover, garantindo a consistência dos dados. Durante essa espera, o Upgrade Result mostra Read-only. Se o período de tolerância for excedido, o sistema retorna para Synchronizing e remove a restrição de somente leitura. Quando o Upgrade Result mudar para Read-only, o switchover estará em andamento e o status da instância será Migrating. Para cancelar um switchover já iniciado, clique em Interrupted na coluna Upgrade Log.

  3. Quando o Upgrade Result mudar para Succeeded, o switchover estará concluído e o status da instância será Running. Verifique a versão atual na página Basic Information da instância.

    Para ver a duração exata do período somente leitura após a atualização, acesse a aba Upgrade History e clique em View Information na coluna Upgrade Log . O tempo de somente leitura corresponde ao intervalo entre o Switching time e o Switching completion time , não incluindo o período em que a instância fica inacessível devido à propagação do cache DNS.

Descrições dos resultados da atualização

A coluna Upgrade Result na aba Upgrade History exibe um dos seguintes valores durante a atualização.

Resultado da atualização

Status da instância

Descrição

Ações disponíveis

Running

Migrating

A tarefa de atualização está em execução.

Nenhuma.

Synchronizing

Migrating Data Out

A replicação lógica está normal.

Alternar para a nova versão ou cancelar a atualização.

Replication Interrupted

Migrating Data Out

A replicação lógica apresenta anomalias.

Visualizar o log de atualização para identificar a causa ou cancelar a atualização.

Read-only

Migrating

O switchover está em andamento. A instância fica somente leitura enquanto as sequences são sincronizadas.

Interromper: cancelar o switchover.

Switchover

Migrating

Sincronização de sequences concluída; finalizando o switchover.

Nenhuma.

Cancel

Running

A tarefa de atualização foi cancelada.

Nenhuma.

Succeeded

Running

A tarefa de atualização foi concluída com sucesso.

Nenhuma.

Referência de API

Operação de API

Descrição

UpgradeDBInstanceMajorVersionPrecheck

Executa uma verificação pré-atualização para uma atualização de versão principal.

DescribeUpgradeMajorVersionPrecheckTask

Consulta o relatório de verificação pré-atualização.

UpgradeDBInstanceMajorVersion

Atualiza a versão principal do mecanismo.

DescribeUpgradeMajorVersionTask

Consulta o histórico de tarefas de atualização de versão principal.

FAQ

Posso modificar a instância durante uma atualização de versão principal?

Não. Modificações na instância — incluindo alteração do tipo de instância — não são suportadas durante uma atualização. Execute outras operações somente após a conclusão da atualização.

Atualizações automáticas de versão principal são suportadas?

Não. Atualizações automáticas para versões principais do mecanismo não são suportadas.

Downgrades de versão principal são suportados?

Não. Não é possível fazer downgrade para uma versão principal inferior após uma atualização. Para executar uma versão anterior, adquira uma nova instância com essa versão e utilize o DTS para migrar os dados.

Após uma atualização de versão principal, aparece um conflito raster_overviews ao criar uma view raster_overviews na instância de destino. Como resolver?

Esse conflito pode ocorrer quando a versão do PostGIS é anterior a 2.5.2, a instância de source executa PostgreSQL 10 ou 11 e você atualiza para o PostgreSQL 12.

Etapa 1: Atualize o plugin PostGIS na instância de source.

Execute o comando abaixo duas vezes para garantir o sucesso da operação.

SELECT PostGIS_Extensions_Upgrade();
SELECT PostGIS_Extensions_Upgrade();

Etapa 2: Escolha a correção com base no uso do plugin PostGIS Raster.

Se o plugin PostGIS Raster estiver em uso:

  1. Execute o seguinte na instância de source para desvincular a view raster_overviews da extensão:

    ALTER EXTENSION PostGIS_Raster DROP VIEW raster_overviews;
    CREATE OR REPLACE VIEW raster_overviews AS SELECT 1;
  2. Atualize a instância PostgreSQL para pelo menos o PostgreSQL 12.

  3. Após a atualização, recrie a view na instância de destino:

    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 o plugin PostGIS Raster não estiver em uso:

  1. Remova o plugin na instância de source:

    DROP EXTENSION PostGIS_Raster;
  2. Atualize a instância PostgreSQL para pelo menos o PostgreSQL 12.

Como evitar problemas de sincronização de dados causados por preempção de slot de replicação?

Para manter os dados de assinatura na instância de source: garanta que a instância não fique indisponível devido a carga excessiva durante a atualização. Se isso ocorrer, a instância de destino pode preemptar o slot de replicação, causando inconsistência de dados. Após a conclusão da atualização, desative a assinatura no banco de dados de destino:

\c your_database
ALTER SUBSCRIPTION your_subscription_name DISABLE;

Para manter os dados de assinatura na instância de destino: desative a assinatura na instância de source antes da atualização e reative-a na instância de destino após a conclusão do processo.

  • Na instância de source (antes da atualização):

    \c your_database
    ALTER SUBSCRIPTION your_subscription_name DISABLE;
  • Na instância de destino (após a atualização):

    \c your_database
    ALTER SUBSCRIPTION your_subscription_name ENABLE;
Para mais informações sobre o uso de slots de replicação para assinatura de dados, consulte Logical subscription e Change tracking . Se os dados de assinatura já estiverem inconsistentes, veja a próxima pergunta frequente.

Como lidar com inconsistência de dados de assinatura após uma atualização?

Após o sucesso da atualização, exclua os dados da tabela na instância de destino (que executa a versão superior) e recrie a assinatura com copy_data=true. Para detalhes, consulte ALTER SUBSCRIPTION.

Alternativamente, use a cláusula ON CONFLICT para mesclar os dados consumidos pela instância de source na instância de destino. O exemplo abaixo demonstra como tratar conflitos por timestamp:

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');

-- Update if the incoming row has a newer timestamp
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;

-- Skip if the incoming row has an older timestamp
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;

-- Insert new rows normally
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 a fase de migração de dados está demorando mais do que o esperado?

A fase de migração de dados (enquanto o status da instância é Migrating) tem uma duração que depende do volume de dados, da quantidade de objetos de banco de dados, das especificações da instância e da largura de banda da rede. Se estiver demorando mais do que o previsto, verifique os itens a seguir:

  • A carga de CPU e I/O da instância no CloudMonitor.

  • O atraso de replicação na view pg_stat_replication.

  • Se a largura de banda da rede atingiu seu limite.

Próximos passos