Utilisation de tables non enregistrées dans Aurora PostgreSQL - Amazon Aurora

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utilisation de tables non enregistrées dans Aurora PostgreSQL

Amazon Aurora PostgreSQL prend en charge les tables non enregistrées qui résistent aux pannes et préservent l'intégrité des données même en cas de défaillance ou de basculement d'une instance d'écriture. Dans PostgreSQL standard, les tables non enregistrées contournent le journal WAL (Write Ahead Log) pendant les opérations d'écriture, ce qui se traduit par des vitesses d'écriture plus rapides. Cependant, cela se fait au détriment de la durabilité, car les tables non enregistrées ne sont pas protégées contre les pannes et peuvent perdre des données en cas de panne du système ou d'arrêt insalubre. Ces tables non enregistrées sont automatiquement tronquées en cas de panne ou d'arrêt incorrect. Leur contenu et leurs index ne sont pas non plus répliqués sur les serveurs de secours.

En revanche, Aurora PostgreSQL gère différemment les tables non enregistrées en raison de son architecture de stockage distribuée. Cela est dû au fait que le système de stockage d'Aurora ne repose pas sur le WAL PostgreSQL traditionnel pour sa durabilité. Cependant, les avantages en termes de performances généralement associés aux tables non enregistrées dans PostgreSQL standard ne sont peut-être pas aussi importants dans Aurora. Cela est dû à l'architecture de stockage distribué d'Aurora, qui peut entraîner une surcharge supplémentaire par rapport au stockage local utilisé dans PostgreSQL standard.

Lorsque vous utilisez des tables non enregistrées dans Aurora PostgreSQL, tenez compte des points suivants :

  • Vous pouvez accéder aux tables non enregistrées uniquement à partir du nœud d'écriture du cluster de base de données Aurora.

  • Les nœuds de lecture peuvent accéder aux tables non enregistrées uniquement lorsqu'ils sont promus au statut d'écrivain.

  • Lorsque vous essayez d'accéder à des tables non enregistrées à partir d'un nœud de lecture, l'erreur suivante s'affiche :

    cannot access temporary or unlogged relations during recovery.

Création de tables non enregistrées

Pour créer une table non enregistrée dans Aurora PostgreSQL, ajoutez le mot clé UNLOGGED dans votre instruction CREATE TABLE :

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

Conversion de tables non enregistrées en tables enregistrées

Lorsque vous devez reconvertir une table non enregistrée en table enregistrée, vous pouvez utiliser la commande suivante :

ALTER TABLE table_name SET LOGGED;

Cette opération réécrit l'intégralité de la table et place un verrou exclusif sur celle-ci jusqu'à la fin de l'opération. Pour les grandes tables, cela peut entraîner des temps d'arrêt importants.

Tables non enregistrées et réplication logique

Les tables non enregistrées ne sont généralement pas incluses dans la réplication logique, car la réplication logique repose sur le WAL pour capturer et transférer les modifications. Par défaut, les modifications apportées aux tables non enregistrées ne sont pas enregistrées dans le WAL et sont exclues du flux de réplication, ce qui les rend inadaptées aux cas d'utilisation nécessitant une réplication logique. Cependant, Aurora PostgreSQL fournit un paramètre rds.logically_replicate_unlogged_tables appelé qui vous permet de contrôler ce comportement :

  • Lorsque rds.logically_replicate_unlogged_tables ce paramètre est défini sur 0 (désactivé), les tables non enregistrées sont exclues de la réplication logique.

  • Lorsque rds.logically_replicate_unlogged_tables ce paramètre est défini sur 1 (activé), les tables non enregistrées sont incluses dans la réplication logique.

Note

Dans Aurora PostgreSQL, rds.logically_replicate_unlogged_tables le paramètre est défini par défaut sur 1 (activé) dans les versions 14 et antérieures, et sur 0 (désactivé) dans les versions 15 et ultérieures.