Trabalhar com tabelas não registradas em log no Aurora PostgreSQL - Amazon Aurora

Trabalhar com tabelas não registradas em log no Aurora PostgreSQL

O Amazon Aurora PostgreSQL comporta tabelas não registradas em log que são à prova de falhas e mantêm a integridade dos dados mesmo após falhas ou failovers de instâncias de gravador. No PostgreSQL padrão, as tabelas não registradas em log ignoram o log de gravação antecipada (WAL) durante as operações de gravação, possibilitando velocidades de gravação mais altas. Entretanto, isso ocorre à custa de uma durabilidade reduzida, pois tabelas não registradas em log não são à prova de falhas e podem perder dados após uma falha do sistema ou um desligamento inadequado. Essas tabelas não registradas em log são automaticamente truncadas após uma falha ou um desligamento inadequado. Os respectivos conteúdos e índices também não são replicados para servidores em espera.

Em contrapartida, o Aurora PostgreSQL lida com tabelas não registradas em log de forma diferente devido à sua arquitetura de armazenamento distribuído. Isso ocorre porque o sistema de armazenamento do Aurora não depende do WAL tradicional do PostgreSQL para durabilidade. Contudo, os benefícios de performance normalmente associados às tabelas não registradas em log no PostgreSQL padrão podem não ser tão significativos no Aurora. Isso se deve à arquitetura de armazenamento distribuído do Aurora, que pode introduzir despesas operacionais adicionais em comparação ao armazenamento local usado no PostgreSQL padrão.

Ao usar tabelas não registradas em log no Aurora PostgreSQL, pense no seguinte:

  • É possível acessar tabelas não registradas em log somente por meio do nó de gravador no cluster de banco de dados do Aurora.

  • Os nós de leitor podem acessar tabelas não registradas em log somente quando promovidos ao status de gravador.

  • Quando você tentar acessar tabelas não registradas em log por meio de um nó de leitor, o seguinte erro será gerado:

    cannot access temporary or unlogged relations during recovery.

Criar tabelas não registradas em log

Para criar uma tabela não registrada em log no Aurora PostgreSQL, adicione a palavra-chave UNLOGGED na declaração CREATE TABLE:

CREATE UNLOGGED TABLE staging_sales_data ( transaction_id bigint, customer_id bigint, product_id bigint, transaction_date date, amount NUMERIC );

Converter tabelas não registradas em log em tabelas registradas em log

Quando precisar reconverter uma tabela não registrada em log em uma tabela registrada em log, você pode usar o seguinte comando:

ALTER TABLE table_name SET LOGGED;

Essa operação regrava a tabela inteira e coloca um bloqueio exclusivo nela até que a operação seja concluída. Para tabelas grandes, isso pode provocar um tempo de inatividade significativo.

Tabelas não registradas em log e replicação lógica

As tabelas não registradas em log geralmente não são incluídas na replicação lógica porque a replicação lógica depende do WAL para capturar e transferir alterações. Por padrão, as alterações nas tabelas não registradas em log não são registradas no WAL e são excluídas do fluxo de replicação, o que as torna inadequadas para casos de uso em que a replicação lógica é necessária. No entanto, o Aurora PostgreSQL fornece um parâmetro, chamado rds.logically_replicate_unlogged_tables, que permite controlar esse comportamento:

  • Quando rds.logically_replicate_unlogged_tables é definido como 0 (desativado), as tabelas não registradas em log são excluídas da replicação lógica.

  • Quando rds.logically_replicate_unlogged_tables é definido como 1 (ativado), as tabelas não registradas em log são incluídas na replicação lógica.

nota

No Aurora PostgreSQL, o parâmetro rds.logically_replicate_unlogged_tables é definido por padrão como 1 (ativado) nas versões 14 e anteriores e como 0 (desativado) nas versões 15 e posteriores.