Guia de Atualização de Versão Principal do OCI Database with PostgreSQL

Faça upgrade das principais versões do OCI Database with PostgreSQL usando a abordagem pg_dump/pg_restore ou pglogical.

O OCI Database with PostgreSQL é um serviço totalmente gerenciado para executar o PostgreSQL na Oracle Cloud, projetado para reduzir a sobrecarga operacional associada ao gerenciamento da infraestrutura subjacente. Ele agiliza a administração diária por meio de provisionamento automatizado, patches suportados, backups automatizados e recursos de monitoramento integrado.

Manter ambientes OCI PostgreSQL atualizados é importante para aproveitar as vantagens dos aprimoramentos de desempenho mais recentes, atualizações de segurança e novos recursos.

As principais versões suportadas do PostgreSQL são 14, 15, 16 e 17.

As seguintes abordagens comumente adotadas para atualizações de versões principais oferecem métodos estruturados e repetíveis para migrar dados e fazer a transição de aplicativos para versões mais recentes.

pg_dump e pg_restore

O upgrade do OCI PostgreSQL usando pg_dump e pg_restore é uma abordagem simples e confiável, especialmente ao executar upgrades de versão principais ou migrar entre ambientes. Este método garante uma migração limpa e controlada de objetos e dados de banco de dados. Com o manuseio adequado de funções, paralelismo e validação, esse método garante um processo de migração suave e controlado.

Este documento percorre todo o processo de atualização usando os comandos exatos.

Observações Importantes

  • pg_dump e pg_restore são ferramentas de backup lógico.
  • Adequado para atualizações de versão principal.
  • Requer tempo de inatividade durante o switchover final.
  • As atribuições sempre devem ser tratadas separadamente.

Atualizar Workflow

O processo de atualização usando pg_dump e pg_restore consiste nas etapas a seguir.

  1. Etapa 1: Despejar Objetos Globais (Funções)

    Essa etapa ajuda a garantir que todas as funções, permissões e controles de acesso sejam preservados, permitindo que os usuários e aplicativos mantenham o acesso consistente após o upgrade.

  2. Etapa 2: Despejar o Banco de Dados

    Esta etapa cria um backup lógico completo do banco de dados, fornecendo uma maneira confiável de transferir dados para o ambiente atualizado.

  3. Etapa 3: Modificar Arquivo de Dump Global

    Esta etapa nos permite revisar e ajustar o dump conforme necessário, ajudando a garantir a compatibilidade com a versão de destino do PostgreSQL e um processo de restauração mais suave.

  4. Etapa 4: Restaurar Objetos Globais

    A restauração de funções primeiro ajuda a garantir que os usuários e permissões apropriados estejam em vigor antes da reintrodução dos dados, oferecendo suporte a um ambiente consistente e seguro.

  5. Etapa 5: Restaurar o banco de dados

    Esta etapa traz os dados para o sistema atualizado, completando a transição e tornando o banco de dados pronto para uso na nova versão do PostgreSQL.

Etapa 1: Despejar Objetos Globais (Funções)

Primeiro, exporte atribuições e objetos globais do banco de dados de origem (versão anterior):

/usr/lib/postgresql/bin/pg_dumpall -U psql -h <IP_of_Source_DB> -g --no-role-passwords --no-tablespaces -f <all_roles>.sql
  • -g: Despeja objetos globais, como atribuições e usuários

    Esta opção se concentra na extração de objetos em todo o cluster, como atribuições, usuários e seus privilégios associados, em vez de dados específicos do banco de dados. A captura desses elementos separadamente ajuda a garantir que os controles de acesso possam ser recriados de forma consistente no ambiente de destino.

  • --no-role-passwords: Evita problemas relacionados à senha

    Isso exclui definições de senha de atribuição do dump, o que pode ajudar a simplificar o processo de restauração, especialmente quando as políticas de senha ou os métodos de autenticação diferem entre os ambientes. Ele também oferece flexibilidade para reconfigurar credenciais conforme necessário após o upgrade.

  • --no-tablespaces: Impede problemas de dependência de tablespace

    Isso omite definições de tablespace do dump, ajudando a evitar dependências em configurações de armazenamento específicas que podem não existir no ambiente de destino. Isso pode tornar o processo de restauração mais portátil e mais fácil de se adaptar ao armazenamento gerenciado pela OCI.

  • -f <all_roles>.sql: Grava saída para um arquivo para reutilização

    Isso direciona a saída para um arquivo SQL, facilitando a revisão, a versão e a reutilização durante a fase de restauração. Ter um arquivo separado para objetos globais também suporta um processo de atualização mais controlado e gradual.

Etapa 2: Despejar o Banco de Dados

Execute um dump de banco de dados usando o formato de diretório:

/usr/lib/postgresql/bin/pg_dump -v -h < IP_of_Source_DB > -U <username> -d <databasename> -Fd -C -j <Num of parallel jobs> -Z0 -f sampledb_dir_format
  • -Fd: Formato de diretório (cria vários arquivos)

    A opção -Fd (formato de diretório) é escolhida porque oferece suporte a despejos paralelos (-j), melhorando o desempenho de bancos de dados grandes e permite restaurações mais granulares e flexíveis de objetos individuais. Este formato armazena o dump como um diretório contendo vários arquivos em vez de um único arquivo. Ele suporta processamento paralelo e fornece maior flexibilidade durante a restauração, especialmente para bancos de dados maiores.

    Como alternativa, o formato personalizado (-Fc) pode ser usado quando um backup de arquivo único é preferido, ao mesmo tempo em que oferece suporte a recursos de compactação e restauração seletiva.

  • -C: Inclui o comando de criação do banco de dados

    Esta opção adiciona as instruções necessárias para criar o banco de dados durante a restauração, ajudando a simplificar o processo de configuração no ambiente de destino.

  • -j : Ativa jobs paralelos para dump mais rápido

    Isso permite que a operação de despejo execute vários trabalhos simultaneamente, o que pode reduzir significativamente o tempo geral necessário para conjuntos de dados grandes.

  • -Z0: Nenhuma compactação (melhora o desempenho)

    A desativação da compactação pode melhorar o desempenho do dump reduzindo a sobrecarga da CPU, o que pode ser benéfico quando a velocidade é uma prioridade e as restrições de armazenamento são mínimas.

  • -v: Modo detalhado para monitorar o andamento

    Essa opção fornece uma saída detalhada durante a execução, facilitando o rastreamento do andamento e a identificação de problemas no início do processo de dump.

Etapa 3: Modificar Arquivo de Dump Global

Antes de restaurar funções:

Modifique o arquivo <all_roles>.sql conforme necessário com base na orientação a seguir.

Remova o seguinte do arquivo de dump de atribuição:

  • Todas as instruções CREATE, ALTER ROLE,GRANT para atribuições que começam com oci_*
  • Quaisquer atributos de função não suportados (especialmente em serviços gerenciados, como OCI PostgreSQL)
  • Todas as instruções CREATE e ALTER ROLE para o usuário administrador que foi criado durante a configuração inicial do banco de dados PostgreSQL do OCI, pois ele precisa ser recriado ao provisionar o banco de dados da versão mais recente. Se você planeja usar outro nome de usuário de administrador, certifique-se de que o usuário de administrador apropriado seja especificado durante a criação do banco de dados PostgreSQL do OCI atualizado.

Além disso, atualize o arquivo de dump de atribuição para remover ou modificar qualquer comando que exija privilégios SUPERUSER, pois eles não são suportados em ambientes gerenciados.

Por exemplo:

Original:

ALTER ROLE test WITH NOSUPERUSER INHERIT CREATEROLE CREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'test';

Modificado:

ALTER ROLE/USER test WITH CREATEROLE CREATEDB LOGIN PASSWORD 'test';

Etapa 4: Restaurar Objetos Globais

Restaurar atribuições no sistema de banco de dados de destino (versão posterior):

/usr/lib/postgresql/bin/psql -U <username> -d <databasename> -h <IP_of_Target_Database_System> -f <all_roles>.sql

Esta etapa garante:

  • Todos os usuários e atribuições são criados
  • Permissões estão disponíveis antes da restauração de dados

Etapa 5: Restaurar o banco de dados

Ignore o seguinte do arquivo de dump toc.dat:

  • Todas as instruções CREATE, ALTER ROLE e GRANT estão falhando para atribuições cujos nomes começam com oci_*.

Restaure o banco de dados no sistema de banco de dados de destino usando:

/usr/lib/postgresql/bin/pg_restore -v -h <IP_of_Target_Database_System> -U <username> -j <Num of parallel jobs> -C -d <databasename> sampledb_dir_format
  • -C: Criar banco de dados, estabelecer conexão com ele e restaurá-lo no banco de dados
  • -j: Restauração paralela para execução mais rápida
  • -v: Saída verbosa para acompanhar o andamento

Esta etapa garante:

  • Verifique a saída detalhada de qualquer mensagem ERROR: e certifique-se de que o comando seja concluído com um código de saída de shell 0. Os erros relacionados aos usuários oci_* podem ser ignorados.
Observação

Para ambientes com vários bancos de dados, recomendamos executar os comandos anteriores separadamente para cada banco de dados para garantir um processo de upgrade completo e consistente.

Considerações sobre Desempenho

  • Usar valores -j mais altos com base na CPU disponível
  • Use -Z0 durante o dump para obter um desempenho mais rápido
  • Garanta capacidade suficiente de E/S de disco
  • Monitorar o progresso da restauração usando logs detalhados

Validação Pós-Restauração

Após concluir a restauração, execute as tarefas a seguir.

  • Verificar contagens de linhas

    Essa tarefa ajuda a confirmar se todos os dados foram migrados com sucesso e se não há discrepâncias entre os bancos de dados de origem e de destino.

  • Verifique a conectividade do aplicativo

    Esta tarefa garante que os aplicativos possam se conectar e interagir com o banco de dados atualizado conforme esperado.

  • Validar atribuições e permissões

    Essa tarefa ajuda a confirmar se os usuários e as funções têm o acesso e os privilégios apropriados no novo ambiente.

  • Execute o comando a seguir para cada banco de dados
    VACUUM ANALYZE <database_name>;

    Esse comando ajuda a atualizar as estatísticas internas usadas pelo planejador de consultas, permitindo que o OCI PostgreSQL gere planos de execução mais eficientes com base nos dados atuais. Ele também pode ajudar a otimizar o desempenho geral após a restauração, especialmente para bancos de dados ou cargas de trabalho maiores com consultas complexas.

pglógico

A extensão pglogical permite a replicação lógica em vários sistemas de banco de dados PostgreSQL da Oracle Cloud Infrastructure (OCI). Essa extensão oferece suporte à replicação PostgreSQL entre versões, tornando-a uma abordagem adequada e robusta para executar upgrades de banco de dados com tempo de inatividade mínimo. Ao permitir a replicação lógica entre os sistemas de origem e de destino, você pode migrar dados de forma integrada entre as versões, mantendo a disponibilidade do aplicativo.

pglogical é particularmente útil para as seguintes situações:

  • Atualizações de versão principal
  • Migrações entre ambientes

O pglogical permite a sincronização de dados perfeita entre:

  • Instâncias do PostgreSQL em diferentes regiões e domínios de disponibilidade do OCI
  • Bancos de dados implantados em diferentes VCNs (Virtual Cloud Networks)
  • Serviços PostgreSQL gerenciados em vários provedores de nuvem
  • Instâncias PostgreSQL autogerenciadas (na nuvem ou on-premises)

Essa flexibilidade torna o pglogical uma solução avançada para atualizações de banco de dados, migrações e implementações híbridas.

Requisitos de Conectividade de Rede

  • Se ambos os sistemas de banco de dados estiverem dentro da mesma VCN, a conectividade estará automaticamente disponível.
  • Se os bancos de dados estiverem em VCNs diferentes dentro da mesma região, configure o LPG (Local Peering Gateway) para estabelecer comunicação.
  • Se os bancos de dados estiverem em VCNs diferentes dentro da região diferente, configure o Gateway de Roteamento Dinâmico (DRG) para estabelecer comunicação.

Ativar Extensão pglógica no Sistema de Banco de Dados de Origem e de Destino

Execute as seguintes etapas nos bancos de dados de origem (versão anterior) e destino (versão posterior):

  1. Acesse a Console do Oracle Cloud e navegue até o sistema de banco de dados do OCI PostgreSQL.
  2. Modifique a configuração acessando o arquivo de configuração.
  3. Selecione Copiar Configuração e atualize os parâmetros necessários. Em Variáveis do Usuário (Leitura/Gravação):
    • wal_level = logical
    • track_commit_timestamp = 1
  4. Ativar Extensão: em Configurar Extensões, selecione pglogical e crie a configuração.
  5. Navegue até o sistema de banco de dados, selecione Editar em Configuração e aplique a configuração criada anteriormente ao sistema de banco de dados.

    O estado do sistema de banco de dados é inicialmente Atualizando. Aguarde até que ele se torne Ativo antes de continuar.

    Essa configuração prepara ambos os ambientes para replicação lógica ativando as definições e extensões necessárias, permitindo que o pglogical capture e sincronize alterações de forma confiável entre os bancos de dados de origem e de destino durante o processo de upgrade.

  6. Depois que o sistema de banco de dados estiver ativo, conecte-se ao banco de dados e verifique as extensões ativadas usando a consulta a seguir.
    SHOW oci.admin_enabled_extensions;
  7. Crie a extensão pglogical usando o seguinte comando:
    CREATE EXTENSION pglogical;

Configurar Banco de Dados de Origem

Faça log-in como usuário administrador (o usuário especificado durante a criação do banco de dados OCI PostgreSQL) e conceda os privilégios necessários para ativar a replicação lógica.

alter role xxx with replication; 
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_reset() to xxx ; 
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_setup to xxx ; 
grant all on FUNCTION pg_catalog.pg_replication_origin_session_setup to xxx;

xxx é o exemplo de usuário criado durante o provisionamento do sistema de banco de dados.

Configurar pglogical na origem (Editor)

  1. Crie o nó do editor no banco de dados de origem.
    SELECT pglogical.create_node(node_name := 'provider1', dsn := 'host=<source_database_fqdn> port=5432 user=xxx password=xxxxx dbname=pglogical_source');
    • node_name: Especifique o nome do editor a ser criado no banco de dados de origem.
    • host: Informe o nome de domínio totalmente qualificado (FQDN) do banco de dados de origem.
    • port_number: Forneça a porta na qual o banco de dados de origem está sendo executado.
    • database_name: Especifique o banco de dados no qual criar a publicação.
  2. Adicione todas as tabelas no esquema public ao conjunto de replicação padrão.
    SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);

Configurar Banco de Dados de Destino

Faça log-in como usuário administrador (o usuário especificado durante a criação do banco de dados OCI PostgreSQL) e conceda os privilégios necessários para ativar a replicação lógica.

alter role xxx with replication;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_reset() to xxx ;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_setup to xxx ;
grant all on FUNCTION pg_catalog.pg_replication_origin_session_setup to xxx;

xxx é o exemplo de usuário criado durante a configuração do banco de dados.

Observação

Ignore o comando alter role ...replication do usuário administrador no banco de dados PostgreSQL do OCI versão 16 e posterior, pois o usuário administrador herda a atribuição de replicação por padrão começando pelo OCI PostgreSQL 16.

Antes de continuar, certifique-se de que:

  • Todos os esquemas e objetos necessários existem no destino

    Os itens incluem esquemas, tabelas, índices, extensões e quaisquer objetos de banco de dados necessários. Ter essas informações em vigor ajuda a garantir que as operações de replicação ou restauração possam prosseguir sem erros de dependências ausentes. A existência pode ser confirmada comparando listagens de esquema (por exemplo, usando \dn e \dt no psql) e validando se as extensões necessárias estão instaladas na origem e no destino.

  • A estrutura do banco de dados corresponde à origem

    O banco de dados de destino deve se alinhar de perto com a origem em termos de definições de esquema, nomes de objeto e estrutura geral. Essa consistência ajuda a suportar uma migração de dados tranquila e reduz a probabilidade de conflitos ou inconsistências durante a sincronização. Verifique revisando definições de esquema (como o uso de pg_dump --schema-only) ou comparando estruturas de tabela e contagens de objetos entre os sistemas de origem e de destino.

Configurar pglogical no destino (assinante)

  1. Crie o nó do assinante no banco de dados de destino:
    SELECT pglogical.create_node(node_name := 'subscriber1', dsn := 'host=<target_database_fqdn> port=5432 user=xxx password=xxxxx dbname=pglogical_target');
    • node_name: Defina o nome do assinante no banco de dados de destino.
    • host: Informe o nome de domínio totalmente qualificado (FQDN) do banco de dados de destino.
    • port_number: Informe a porta na qual o banco de dados de destino está sendo executado.
    • database_name: Forneça o nome do banco de dados em que a assinatura será criada
  2. Crie a assinatura para iniciar os processos de sincronização e replicação em segundo plano:
    SELECT pglogical.create_subscription(subscription_name := 'subscription1', provider_dsn := 'host=<source_database_fqdn> port=5432 user=xxx password=xxxxxx dbname=pglogical_source sslmode=require');
    • subscription_name: Forneça o nome da assinatura.
    • host: Fornecer o FQDN do banco de dados de origem.
    • port_number: Forneça a porta na qual o banco de dados de destino está sendo executado.
    • database_name: Informe o nome do banco e dados de origem.

Verificar Replicação

  1. Verifique o status da assinatura (destino): Execute a instrução a seguir para verificar o status da sua assinatura no banco de dados de destino.
    SELECT * FROM pglogical.show_subscription_status();
  2. Verifique o status da replicação (origem): execute a instrução a seguir para verificar o status da replicação no banco de dados de origem.
    SELECT * FROM pg_stat_replication;

Se ambas as verificações indicarem um status ativo sem atraso ou alterações pendentes, esse resultado sugerirá que a replicação foi concluída e que o banco de dados de destino está totalmente sincronizado com a origem.

Para obter mais informações sobre o pglogical, incluindo etapas e explicações detalhadas, consulte Sincronização entre regiões do OCI Database with PostgreSQL usando a Extensão pglógica

Conclusão

Em conclusão, os principais upgrades de versão usando pg_dump/pg_restore e pglogical oferecem vantagens distintas, dependendo do caso de uso. A abordagem pg_dump/pg_restore é simples e confiável para bancos de dados menores ou quando o tempo de inatividade é aceitável, mas pode ser demorado para grandes conjuntos de dados. Por outro lado, o pglogical permite atualizações de tempo de inatividade quase zero, replicando dados entre versões, tornando-o mais adequado para sistemas grandes ou de missão crítica.

A escolha do método correto depende de fatores como tamanho do banco de dados, tempo de inatividade aceitável e complexidade operacional. Independentemente da abordagem, o planejamento, os testes e a validação pós-atualização completos são essenciais para garantir a integridade dos dados e uma transição tranquila para a versão mais recente do OCI PostgreSQL.