Trabajo con tablas no registradas en Aurora PostgreSQL - Amazon Aurora

Trabajo con tablas no registradas en Aurora PostgreSQL

Amazon Aurora PostgreSQL admite tablas no registradas que son a prueba de errores y mantienen la integridad de los datos incluso después de errores o conmutaciones por error de las instancias del escritor. En PostgreSQL estándar, las tablas no registradas omiten el registro de escritura previa (WAL) durante las operaciones de escritura, lo que se traduce en velocidades de escritura más rápidas. Sin embargo, esto conlleva una menor durabilidad, ya que las tablas no registradas no son a prueba de errores y pueden perder datos tras un error del sistema o un apagado incorrecto. Estas tablas no registradas se truncan automáticamente tras un error o un cierre incorrecto. Sus contenidos e índices tampoco se replican en los servidores en espera.

Por el contrario, Aurora PostgreSQL gestiona las tablas no registradas de forma diferente debido a su arquitectura de almacenamiento distribuido. Esto se debe a que el sistema de almacenamiento de Aurora no depende del WAL de PostgreSQL tradicional para garantizar su durabilidad. Sin embargo, los beneficios de rendimiento que suelen asociarse a las tablas no registradas en PostgreSQL estándar pueden no ser tan significativos en Aurora. Esto se debe a la arquitectura de almacenamiento distribuido de Aurora, que puede generar una sobrecarga adicional en comparación con el almacenamiento local utilizado en PostgreSQL estándar.

Cuando se usen tablas no registradas en Aurora PostgreSQL, tenga en cuenta lo siguiente:

  • Solo puede acceder a las tablas no registradas desde el nodo de escritura del clúster de base de datos de Aurora.

  • Los nodos de lector solo pueden acceder a las tablas no registradas cuando se promocionan al estado de escritor.

  • Al intentar acceder a tablas no registradas desde un nodo de lector, se producirá el siguiente error:

    cannot access temporary or unlogged relations during recovery.

Creación de tablas no registradas

Para crear una tabla no registrada en Aurora PostgreSQL, agregue la palabra clave UNLOGGED en la instrucción CREATE TABLE:

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

Conversión de tablas no registradas en tablas registradas

Cuando necesite convertir una tabla no registrada de nuevo en una tabla registrada, puede utilizar el siguiente comando:

ALTER TABLE table_name SET LOGGED;

Esta operación reescribe toda la tabla y la bloquea de forma exclusiva hasta que se complete la operación. En el caso de tablas grandes, esto puede provocar un tiempo de inactividad significativo.

Tablas no registradas y replicación lógica

Por lo general, las tablas no registradas no se incluyen en la replicación lógica porque esta se basa en WAL para capturar y transferir los cambios. De forma predeterminada, los cambios en las tablas no registradas no se registran en WAL y se excluyen del flujo de replicación, lo que las hace inadecuadas para los casos de uso en los que se requiere la replicación lógica. Sin embargo, Aurora PostgreSQL proporciona un parámetro llamado rds.logically_replicate_unlogged_tables que le permite controlar este comportamiento:

  • Cuando rds.logically_replicate_unlogged_tables se establece en 0 (desactivado), las tablas no registradas se excluyen de la replicación lógica.

  • Cuando rds.logically_replicate_unlogged_tables se establece en 1 (activado), las tablas no registradas se incluyen en la replicación lógica.

nota

En Aurora PostgreSQL, el parámetro rds.logically_replicate_unlogged_tables se establece de forma predeterminada en 1 (activado) en las versiones 14 y anteriores, y en 0 (desactivado) en las versiones 15 y posteriores.