Migrar do PostgreSQL para o Aurora DSQL - Amazon Aurora DSQL

Migrar do PostgreSQL para o Aurora DSQL

O Aurora DSQL foi projetado para ser compatível com o PostgreSQL. Ele deve comportar recursos relacionais principais, como transações ACID, índices secundários, junções e operações DML padrão. A maioria das aplicações PostgreSQL existentes pode migrar para o Aurora DSQL com o mínimo de alterações.

Esta seção fornece orientação prática para migrar sua aplicação para o Aurora DSQL, incluindo compatibilidade de frameworks, padrões de migração e considerações arquitetônicas.

Compatibilidade com frameworks e ORM

O Aurora DSQL utiliza o protocolo de comunicação padrão do PostgreSQL, garantindo a compatibilidade com drivers PostgreSQL e frameworks. Os ORMs mais conhecidos funcionam com o Aurora DSQL com o mínimo ou nenhuma alteração. Consulte Adaptadores e dialetos do Aurora DSQL para acessar implementações de referência e integrações de ORM disponíveis.

Padrões comuns de migração

Ao migrar do PostgreSQL para o Aurora DSQL, alguns recursos funcionam de forma diferente ou têm sintaxe alternativa. Esta seção fornece orientação sobre cenários comuns de migração.

Alternativas de operações DDL

O Aurora DSQL fornece alternativas modernas às operações DDL tradicionais do PostgreSQL:

Compilação de índice

Use CREATE INDEX ASYNC em vez de CREATE INDEX para criação de índices sem bloqueio.

Benefício: criação de índice de tempo de inatividade zero em tabelas grandes.

Remoção de dados

Use DELETE FROM table_name em vez de TRUNCATE.

Alternativa: para a recriação completa da tabela, use DROP TABLE seguido de CREATE TABLE.

Configuração do sistema

O Aurora DSQL não comporta comandos ALTER SYSTEM porque o sistema é totalmente gerenciado. A configuração é feita automaticamente com base nos padrões de workload.

Benefício: não há necessidade de ajuste do banco de dados nem gerenciamento de parâmetros.

Padrões de projeto do esquema

Adapte estes padrões comuns do PostgreSQL para compatibilidade com o Aurora DSQL:

Sequências de chaves

Use UUIDs ou chaves compostas em vez de sequências de incremento automático. As sequências de incremento automático geram uma grande quantidade de conflitos em um sistema distribuído, pois vários gravadores estão tentando atualizar os mesmos dados. Os UUIDs fornecem a mesma função, mas não exigem coordenação.

Exemplo da: id UUID PRIMARY KEY DEFAULT gen_random_uuid()

Padrões de integração referenciais

O Aurora DSQL comporta relações e operações JOIN de tabelas, mas ainda não impõe restrições de chave externa. Essa opção de projeto se alinha aos padrões modernos de banco de dados distribuídos, nos quais a validação da camada de aplicação fornece maior flexibilidade e evita gargalos de performance das operações em cascata.

Padrão: implemente verificações de integridade referencial em sua camada de aplicação usando convenções de nomenclatura consistentes, lógica de validação e limites de transação. Muitas aplicações de alta escala preferem essa abordagem para melhor controle sobre o tratamento de erros e a performance.

Tratamento de dados temporários

Use CTEs, subconsultas ou tabelas regulares com lógica de limpeza em vez de tabelas temporárias.

Alternativa: crie tabelas com nomes específicos da sessão e limpe-as em sua aplicação.

Noções básicas sobre as diferenças de arquitetura

A arquitetura distribuída e sem servidor do Aurora DSQL difere intencionalmente do PostgreSQL tradicional em várias áreas. Essas diferenças possibilitam os principais benefícios de simplicidade e escala do Aurora DSQL.

Modelo de banco de dados simplificado

Único banco de dados por cluster

O Aurora DSQL fornece um banco de dados incorporado denominado postgres por cluster.

Dica de migração: se sua aplicação usa vários bancos de dados, crie clusters do Aurora DSQL separados para separação lógica ou use esquemas em um único cluster.

Sem tabelas temporárias

Tabelas temporárias ainda não são aceitas no Aurora DSQL. Expressões de tabela comuns (CTEs) e subconsultas podem ser usadas como uma alternativa para consultas complexas.

Alternativa: use CTEs com cláusulas WITH para conjuntos de resultados temporários ou tabelas regulares com nomenclatura exclusiva para dados específicos da sessão.

Gerenciamento automático de armazenamento

O Aurora DSQL elimina os espaços de tabela e o gerenciamento manual do armazenamento. O armazenamento escala e otimizado automaticamente com base em seus padrões de dados.

Benefício: não é necessário monitorar o espaço em disco, planejar a alocação de armazenamento nem gerenciar configurações de espaço de tabela.

Padrões de aplicação moderna

O Aurora DSQL incentiva padrões de desenvolvimento de aplicações modernas que melhoram a capacidade de manutenção e a performance:

Lógica em nível de aplicação em vez de gatilhos de banco de dados

O Aurora DSQL não comporta gatilhos.

Estratégia de migração: mova a lógica de gatilho para o código da aplicação, use arquiteturas orientadas por eventos com serviços da AWS, como o EventBridge, ou implemente trilhas de auditoria usando o registro em log de aplicações.

Funções SQL para processamento de dados

O Aurora DSQL comporta funções baseadas em SQL, mas não a linguagens processuais, como PL/pgSQL.

Alternativa: use funções SQL para transformações de dados ou mova uma lógica complexa para sua camada de aplicação ou funções do AWS Lambda.

Controle de simultaneidade otimista em vez de bloqueio pessimista

O Aurora DSQL usa o controle otimista (OCC), uma abordagem sem bloqueio que difere de sistemas tradicionais baseados em bloqueios. Em vez de adquirir bloqueios que impedem outras transações, o Aurora DSQL permite que as transações prossigam sem bloqueio e detecta conflitos no momento da confirmação. Isso elimina deadlocks e impede que transações lentas bloqueiem outras operações.

Diferença fundamental: quando ocorrem conflitos, o Aurora DSQL exibe um erro de serialização em vez de fazer as transações aguardarem bloqueios. Isso exige que as aplicações implementem uma lógica de repetição, semelhante à manipulação de tempos limite de bloqueio em bancos de dados tradicionais, mas os conflitos são resolvidos imediatamente, em vez de causar esperas de bloqueio.

Padrão de projeto: implemente uma lógica de transação idempotente com mecanismos de repetição. Crie esquemas para minimizar a contenção usando chaves primárias aleatórias e distribuindo atualizações por todo o intervalo de chaves. Para obter detalhes, consulte Controle de simultaneidade no Aurora DSQL.

Relacionamentos e integridade referencial

O Aurora DSQL aceita relacionamentos de chave externa entre tabelas, incluindo operações JOIN , mas as restrições de chave externa ainda não são aceitas. Embora impor a integridade referencial possa ser valioso, operações em cascata (como exclusões em cascata) podem criar problemas de performance inesperados, por exemplo, excluir um pedido com mil itens de linha se torna uma transação de 1.001 linhas. Muitos clientes evitam restrições de chave externa por esse motivo.

Padrão de projeto: implemente verificações de integridade referencial em sua camada de aplicação, use padrões de consistência eventual ou utilize serviços da AWS para validação de dados.

Simplificações operacionais

O Aurora DSQL elimina muitas tarefas tradicionais de manutenção de banco de dados, reduzindo a sobrecarga operacional:

Não é necessária manutenção manual

O Aurora DSQL não exige comandos VACUUM, TRUNCATE e ALTER SYSTEM. O sistema gerencia automaticamente a otimização do armazenamento, a coleta de estatísticas e o ajuste da performance.

Benefício: elimina a necessidade de janelas de manutenção do banco de dados, agendamento de vácuo e ajuste dos parâmetros do sistema.

Escalabilidade e particionamento automático

O Aurora DSQL particiona e distribui automaticamente seus dados com base nos padrões de acesso. O particionamento e as sequências manuais não são necessários.

Dica de migração: remova a lógica de particionamento manual e deixe o Aurora DSQL lidar com a distribuição de dados. Use UUIDs ou IDs gerados pela aplicação em vez de sequências.

Migração assistida por IA

É possível utilizar as ferramentas de IA para ajudar a migrar sua base de código para o Aurora DSQL:

Usar o Kiro para assistência à migração

Agentes de codificação, como o Kiro, podem ajudar você a analisar e migrar seu código do PostgreSQL para o Aurora DSQL:

  • Análise do esquema: faça upload de seus arquivos de esquema existentes e peça ao Kiro que identifique possíveis problemas de compatibilidade e sugira alternativas.

  • Transformação de código: forneça o código de sua aplicação e peça ao Kiro que ajude a refatorar a lógica de gatilho, substituir sequências por UUIDs ou modificar padrões de transação.

  • Planejamento de migração: peça à Kiro que crie um plano de migração passo a passo com base em sua arquitetura de aplicação específica.

Exemplos de prompt do Kiro:

"Analyze this PostgreSQL schema for DSQL compatibility and suggest alternatives for any unsupported features" "Help me refactor this trigger function into application-level logic for DSQL migration" "Create a migration checklist for moving my Django application from PostgreSQL to DSQL"

Servidor MCP do Aurora DSQL

O servidor de protocolo de contexto para modelos (MCP) do Aurora DSQL permite que assistentes de IA, como o Claude, se conectem diretamente ao seu cluster do Aurora DSQL e pesquisem a documentação do Aurora DSQL. Isso permite que a IA:

  • Analise seu esquema existente e sugira alterações de migração.

  • Teste as consultas e verifique a compatibilidade durante a migração

  • Forneça orientações precisas e atualizadas com base na documentação mais recente do Aurora DSQL

Para usar o servidor MCP do Aurora DSQL com Claude ou outros assistentes de IA, consulte as instruções de configuração do servidor MCP do Aurora DSQL.

Considerações sobre o Aurora DSQL para compatibilidade com o PostgreSQL

O Aurora DSQL tem diferenças de suporte a recursos em relação ao PostgreSQL autogerenciado, que permitem sua arquitetura distribuída, operação sem servidor e escalabilidade automática. A maioria das aplicações funciona dentro dessas diferenças sem modificações.

Com relação a considerações gerais, consulte Considerações para trabalhar com Amazon Aurora DSQL. Com relação a cotas e limites, consulte Cotas de cluster e limites de banco de dados no Amazon Aurora DSQL.

  • O Aurora DSQL usa um único banco de dados incorporado chamado postgres. Não é possível criar bancos de dados adicionais nem renomear ou excluir o banco de dados postgres.

  • O banco de dados postgres usa a codificação de caracteres UTF-8. Não é possível alterar a codificação do servidor.

  • O banco de dados usa somente o agrupamento C.

  • O Aurora DSQL usa UTC como fuso horário do sistema. O Postgres armazena todas as datas e horários com reconhecimento de fuso horário internamente em UTC. Você pode definir o parâmetro de configuração TimeZone para converter a forma como ele é exibido para o cliente e servir como padrão para a entrada do cliente que o servidor usará para converter em UTC internamente.

  • O nível de isolamento de transação é fixo em Repeatable Read no PostgreSQL.

  • As transações têm as seguintes restrições:

    • Uma transação não pode misturar operações de DDL e de DML.

    • Uma transação pode incluir apenas uma instrução de DDL.

    • Uma transação pode modificar até 3 mil linhas, independentemente do número de índices secundários.

    • O limite de 3 mil linhas se aplica a todas as instruções de DML (INSERT, UPDATE e DELETE).

  • As conexões de banco de dados atingem o tempo limite após uma hora.

  • No momento, o Aurora DSQL não permite que você execute GRANT [permission] ON DATABASE. Se você tentar executar essa instrução, o Aurora DSQL exibirá a mensagem de erro ERROR: unsupported object type in GRANT.

  • O Aurora DSQL não permite que perfis de usuário não administrativo executem o comando CREATE SCHEMA. Não é possível executar o comando GRANT [permission] on DATABASE e conceder permissões CREATE no banco de dados. Se um perfil de usuário não administrativo tentar criar um esquema, o Aurora DSQL exibirá a mensagem de erro ERROR: permission denied for database postgres.

  • Os usuários que não são administradores não podem criar objetos no esquema público. Somente usuários administradores podem criar objetos no esquema público. O perfil de usuário administrador tem permissões para conceder acesso de leitura, gravação e modificação a esses objetos para usuários não administradores, mas não pode conceder permissões CREATE para o esquema público em si. Os usuários não administradores devem usar esquemas diferentes criados pelo usuário para criar objetos.

Se você encontrar recursos essenciais para sua migração, mas que atualmente não são aceitos no Aurora DSQL, consulte Fornecer feedback sobre o Amazon Aurora DSQL para acessar informações sobre como compartilhar feedback com a AWS.