Skip to content

Commit

Permalink
Update logicaldecoding.xml
Browse files Browse the repository at this point in the history
Relecture!

J'ai du revenir ici à l'original en anglais parfois pour bien comprendre et mieux réécrire.

Merci
  • Loading branch information
Jean-Paul Argudo authored and gleu committed Aug 5, 2022
1 parent 9691d40 commit 5a4b06a
Showing 1 changed file with 47 additions and 47 deletions.
94 changes: 47 additions & 47 deletions postgresql/logicaldecoding.xml
Original file line number Diff line number Diff line change
Expand Up @@ -147,15 +147,15 @@ postgres=# SELECT pg_drop_replication_slot('regression_slot');
(1 row)</programlisting>

<para>
Les exemples suivant montrent comment le décodage logique est contrôlé avec
Les exemples suivants montrent comment le décodage logique est contrôlé avec
le protocole de réplication en flux, en utilisant l'outil <xref
linkend="app-pgrecvlogical"/> fourni avec la distribution PostgreSQL. Il
requiert que l'authentification du client soit configuré pour autoriser une
connexion de réplication (voir <xref
linkend="streaming-replication-authentication"/>) et que le paramètre
<varname>max_wal_senders</varname> soit configuré suffisamment haut pour
qu'une nouvelle connexion soit acceptée. Le deuxième exemple montre comment
envoyer en flux les transactions en deux phases. Avant d'utiliser des
qu'une nouvelle connexion soit acceptée. Le deuxième exemple montre comment
envoyer en flux les transactions en deux phases. Avant d'utiliser des
commandes à deux phases, vous devez configurer le paramètre <xref
linkend="guc-max-prepared-transactions"/> à au moins 1.
</para>
Expand Down Expand Up @@ -193,10 +193,10 @@ $ pg_recvlogical -d postgres --slot=test --drop-slot</programlisting>
les transactions préparées. Avant d'utiliser les commandes du Two-Phase
Commit, vous devez configurer le paramètre
<varname>max_prepared_transactions</varname> à la valeur 1 au minimum.
Vous devez aussi avoir configurer le paramètre two-phase à la valeur true
Vous devez aussi avoir configuré le paramètre two-phase à la valeur true
lors de la création du slot en utilisant
<function>pg_create_logical_replication_slot</function>. Notez que la
transaction entière sera envoyé dans le flux après la validation de la
transaction entière sera envoyée dans le flux après la validation de la
transaction si elle n'est pas déjà décodée.
</para>

Expand All @@ -219,7 +219,7 @@ postgres=# select * from pg_logical_slot_get_changes('regression_slot', NULL, NU
0/168A060 | 529 | COMMIT PREPARED 'test_prepared1', txid 529
(4 row)

postgres=#-- you can also rollback a prepared transaction
postgres=#-- On peut aussi faire un rollback de la transaction préparée
postgres=# BEGIN;
postgres=*# INSERT INTO data(data) VALUES('6');
postgres=*# PREPARE TRANSACTION 'test_prepared2';
Expand Down Expand Up @@ -297,7 +297,7 @@ postgres=# select * from pg_logical_slot_get_changes('regression_slot', NULL, NU

<para>
Un slot logique émettra chaque modification une fois en temps normal. La
position actuelle de chaque slot est enregistré seulement lors d'un
position actuelle de chaque slot est enregistrée seulement lors d'un
checkpoint, donc dans le cas d'un crash, le slot pourrait revenir à un
ancien LSN, qui sera la cause d'un renvoi des changements récents au
redémarrage du serveur. Les clients de décodage logique sont responsables
Expand All @@ -323,7 +323,7 @@ postgres=# select * from pg_logical_slot_get_changes('regression_slot', NULL, NU
<para>
Un slot de réplication logique ne sait rien sur l'état du ou des
destinataire(s). Il est même possible d'avoir plusieurs destinataires
différents utilisant un même slot à des moments différents;&nbsp; ils ne
différents utilisant un même slot à des moments différents;&nbsp; Ils ne
recevront que les changements à partir du moment où le dernier
destinataire a arrêté de les consommer. Un seul destinataire peut
consommer les changements d'un slot à un instant donné.
Expand All @@ -332,7 +332,7 @@ postgres=# select * from pg_logical_slot_get_changes('regression_slot', NULL, NU
<caution>
<para>
Les slots de réplications persistent après un arrêt brutal et ne
connaissent rien de l'état de leur(s) consommateur(s). Ils empêcheront
connaissent rien de l'état de leur(s) consommateur(s). Ils empêcheront
la suppression automatique des ressources nécessaires même si aucune
connexion ne les utilise. Cela consomme de l'espace car aucun des
journaux de transactions et aucune des lignes des catalogues systèmes
Expand Down Expand Up @@ -365,20 +365,20 @@ postgres=# select * from pg_logical_slot_get_changes('regression_slot', NULL, NU
linkend="protocol-replication-create-replication-slot"/>), un instantané est exporté
(voir <xref linkend="functions-snapshot-synchronization"/>), qui montrera
exactement l'état de la base de données après lequel tous les changements
seront inclus dans le flux de changement. Cela peut être utilisé pour
seront inclus dans le flux de changement. Cela peut être utilisé pour
créer un nouveau réplicat en utilisant <link
linkend="sql-set-transaction"><literal>SET TRANSACTION
SNAPSHOT</literal></link> pour lire l'état de la base au moment où le
slot a été créé. Cette transaction peut alors être utilisée pour
slot a été créé. Cette transaction peut alors être utilisée pour
exporter l'état de la base à ce point dans le temps, lequel peut ensuite
être mis à jour en utilisant le contenu des slots sans perdre le moindre
changement.
</para>

<para>
La création d'un instantané n'est pas toujours possible. En particulier,
La création d'un instantané n'est pas toujours possible. En particulier,
cela échouera quand cela est fait à partir d'un serveur secondaire en
lecture seule. Les applications qui ne nécessitent pas d'instantané
lecture seule. Les applications qui ne nécessitent pas d'instantané
exporté peuvent les supprimer avec l'option
<literal>NOEXPORT_SNAPSHOT</literal>.
</para>
Expand Down Expand Up @@ -473,7 +473,7 @@ postgres=# select * from pg_logical_slot_get_changes('regression_slot', NULL, NU
</indexterm>

<para>
Un plugin de sortie est chargé en chargeant dynamiquement une bibliothèque
Un plugin de sortie est initialisé en chargeant dynamiquement une bibliothèque
partagée avec comme nom de base le nom du plugin de sortie. Le chemin de
recherche de bibliothèque habituel est utilisé pour localiser cette
bibliothèque. Pour fournir les callbacks de plugins de sortie requis et
Expand Down Expand Up @@ -532,7 +532,7 @@ typedef void (*LogicalOutputPluginInit) (struct OutputPluginCallbacks *cb);</pro
<function>stream_truncate_cb</function> sont facultatifs.
De plus, si l'envoi en flux des commandes à deux phases doit être
supporté, alors des fonctions de support supplémentaires doivent être
fournies. (Voir <xref linkend="logicaldecoding-two-phase-commits"/>
fournies. (Voir <xref linkend="logicaldecoding-two-phase-commits"/>
pour les détails).
</para>

Expand Down Expand Up @@ -566,9 +566,9 @@ CREATE TABLE autre_table_catalogue(data text) WITH (user_catalog_table = true);<
Notez que l'accès aux tables utilisateurs ou aux tables systèmes dans le
plugin de sortie doit se faire uniquement via les API de parcours
<literal>systable_*</literal>. L'accès via les API de parcours
<literal>heap_*</literal> renverre une erreur. De plus, toute action
<literal>heap_*</literal> renverra une erreur. De plus, toute action
amenant à l'affectation d'un identifiant de transaction est prohibée.
Ceci, parmi d'autres, inclut l'écriture dans les tables, la réalisation
Ceci, parmi d'autres choses, inclut l'écriture dans les tables, la réalisation
de modifications DDL, et l'appel à <literal>pg_current_xact_id()</literal>.
</para>
</sect2>
Expand All @@ -587,7 +587,7 @@ CREATE TABLE autre_table_catalogue(data text) WITH (user_catalog_table = true);<
<literal>OutputPluginOptions.output_type</literal> à
<literal>OUTPUT_PLUGIN_TEXTUAL_OUTPUT</literal> au lieu de
<literal>OUTPUT_PLUGIN_BINARY_OUTPUT</literal> dans la <link
linkend="logicaldecoding-output-plugin-startup">fonction callback de
linkend="logicaldecoding-output-plugin-startup"> fonction callback de
démarrage</link>. Dans ce cas, toutes les données doivent être dans
l'encodage du serveur pour qu'un champ de type <type>text</type> puisse
les contenir. Ceci est vérifié dans les constructions comprenant les
Expand Down Expand Up @@ -628,7 +628,7 @@ CREATE TABLE autre_table_catalogue(data text) WITH (user_catalog_table = true);<
<note>
<para>
Seules les transactions qui ont été synchronisées sur disque de manière
sûre seront décodées. Cela peut amener à ce qu'un
sûre seront décodées. Cela peut amener à ce qu'un
<command>COMMIT</command> ne soit pas immédiatement décodé lors d'un
appel à <literal>pg_logical_slot_get_changes()</literal> juste après
celui-ci quand <varname>synchronous_commit</varname> est positionné à
Expand Down Expand Up @@ -753,16 +753,16 @@ CREATE TABLE autre_table_catalogue(data text) WITH (user_catalog_table = true);<
et <function>commit_cb</function>, mais en plus le descripteur de
relation <parameter>relation</parameter> pointe vers la relation à
laquelle appartient la ligne et une structure
<parameter>change</parameter> décrivant les modifications de ligne y est
<parameter>change</parameter> décrivant les modifications de la ligne y est
passée.
</para>

<note>
<para>
Seules les changements dans les tables définies par les utilisateurs qui
Seuls les changements dans les tables définies par les utilisateurs qui
sont journalisées (voir <xref linkend="sql-createtable-unlogged"/>) et
non temporaires(voir <xref linkend="sql-createtable-temporary"/>)
peuvent être extraites avec le décodage logique.
non temporaires (voir <xref linkend="sql-createtable-temporary"/>)
peuvent être extraits avec le décodage logique.
</para>
</note>
</sect3>
Expand All @@ -784,7 +784,7 @@ CREATE TABLE autre_table_catalogue(data text) WITH (user_catalog_table = true);<
Les paramètres sont identiques à ceux du callback
<function>change_cb</function>. Néanmoins, comme les actions du
<command>TRUNCATE</command> sur les tables liées par clés étrangères
doivent être exécutées ensembles, ce callback reçoit un tableau de
doivent être exécutées ensemble, ce callback reçoit un tableau de
relations au lieu d'une seule relation. Voir la description de
l'instruction <xref linkend="sql-truncate"/> pour les détails.
</para>
Expand All @@ -805,18 +805,18 @@ CREATE TABLE autre_table_catalogue(data text) WITH (user_catalog_table = true);<
);</programlisting>

Le paramètre <parameter>ctx</parameter> a le même contenu que pour les
autres fonctions. Aucune information mais l'origine est disponible. Pour
autres fonctions. Aucune information n'est disponible à part l'origine. Pour
signaler que les changements provenant du nœud sont hors de propos, elle
renvoie true, ce qui permet de les filtrer. Elle renvoie false dans les
autres cas. Les autres fonctions ne seront pas appelées pour les
transactions et changements qui ont été filtrées.
transactions et changements qui ont été filtrés.
</para>

<para>
Ceci est utile pour implémenter des solutions de réplication en cascade
ou des solutions de réplication multi-directionnelles. Filtrer par
rapport à l'origine perment d'empêcher la réplication dans les deux
sesns des mêmes modifications dans ce type de configuration. Quand les
sens des mêmes modifications dans ce type de configuration. Quand les
transactions et les modifications contiennent aussi des informations sur
l'origine, le filtre via cette fonction est beaucoup plus efficace.
</para>
Expand All @@ -840,8 +840,8 @@ CREATE TABLE autre_table_catalogue(data text) WITH (user_catalog_table = true);<
);</programlisting>

Le paramètre <parameter>txn</parameter> contient des méta-informations
sur la transaction, comme l'horodatage à laquelle la transaction a été
validée et son identifiant (XID). Notez néanmoins qu'il peut être NULL
sur la transaction, comme l'horodatage de la validation de la transaction
et son identifiant (XID). Notez néanmoins qu'il peut être NULL
quand le message n'est pas transactionnel et que le XID n'a pas encore
été affecté dans la transaction qui a tracé le message. Le
<parameter>lsn</parameter> a la position du message dans les WAL. Le
Expand All @@ -855,7 +855,7 @@ CREATE TABLE autre_table_catalogue(data text) WITH (user_catalog_table = true);<
paramètre <parameter>prefix</parameter> est un préfixe arbitraire
terminé par un caractère nul qui peut être utilisé pour identifier les
messages intéressants pour le plugin courant. Et enfin, le paramètre
<parameter>message</parameter> détient le message réel de taille
<parameter>message</parameter> contient le message réel de taille
<parameter>message_size</parameter>.
</para>

Expand All @@ -878,9 +878,9 @@ CREATE TABLE autre_table_catalogue(data text) WITH (user_catalog_table = true);<
PREPARED</command>. Pour signaler que le décodage doit être ignoré,
renvoyez <literal>true</literal>&nbsp;; <literal>false</literal> dans le
cas contraire. Quand la fonction callback est définie,
<literal>false</literal> est supposé (autrement dit, pas de filtre
toutes les transactions utilisant la validation en deux phases sont
décodées aussi en deux phases).
<literal>false</literal> est supposé (autrement dit, il n'y a pas de
filtrage et toutes les transactions utilisant la validation en deux phases
sont décodées aussi en deux phases).

<programlisting>typedef bool (*LogicalDecodeFilterPrepareCB) (struct LogicalDecodingContext *ctx,
TransactionId xid,
Expand Down Expand Up @@ -960,7 +960,7 @@ CREATE TABLE autre_table_catalogue(data text) WITH (user_catalog_table = true);<

<para>
La fonction callback requise <function>rollback_prepared_cb</function>
est appelée à chaque qu'une transaction <command>ROLLBACK
est appelée à chaque fois qu'une transaction <command>ROLLBACK
PREPARED</command> a été décodée. Le champ <parameter>gid</parameter>,
qui fait partie du paramètre <parameter>txn</parameter>, peut être
utilisé dans cette fonction callback. Les paramètres
Expand Down Expand Up @@ -1188,42 +1188,42 @@ OutputPluginWrite(ctx, true);</programlisting>

<para>
Dans une configuration de réplication synchrone, un verrou deadlock peut
survenir si la transaction a verrouiller les tables du catalogue de façon
survenir si la transaction a verrouillé les tables du catalogue de façon
exclusive. Voir <xref linkend="logicaldecoding-capabilities"/> pour des
informations sur les tables du catalogue utilisateur catalog tables. Ceci
survient parce que le décodage logique des transactions peut verrouiller
les tables du catalogue pour y accéder. Pour éviter ceci, les
utilisateurs doivent s'empêcher de prendre un verrou exclusif sur les
tables du catalogue. Ceci peut arrive des facçons suivantes&nbsp;:
tables du catalogue. Ceci peut arriver dans les cas suivants&nbsp;:

<itemizedlist>
<listitem>
<para>
Lancer une commande <command>LOCK</command> exclusive sur
<structname>pg_class</structname> dans une transaction.
<structname>pg_class</structname> dans une transaction;
</para>
</listitem>

<listitem>
<para>
Exécuter une commande <command>CLUSTER</command> sur
<structname>pg_class</structname> dans une transaction.
<structname>pg_class</structname> dans une transaction;
</para>
</listitem>

<listitem>
<para>
<command>PREPARE TRANSACTION</command> après une commande
<command>LOCK</command> sur <structname>pg_class</structname> et
autoriser le décodage logiques des transactions en deux phases.
autoriser le décodage logiques des transactions en deux phases;
</para> </listitem>

<listitem>
<para>
<command>PREPARE TRANSACTION</command> après une commande
<command>CLUSTER</command> sur <structname>pg_trigger</structname> et
autoriser le décodage logiques des transactions en deux phases. Ceci
amènera un deadlock seulement quand la table publiée a un trigger.
amènera un deadlock seulement quand la table publiée a un trigger;
</para>
</listitem>

Expand All @@ -1247,9 +1247,9 @@ OutputPluginWrite(ctx, true);</programlisting>

<para>
Les fonctions callbacks simples pour le plugin de sortie
(donc <function>begin_cb</function>, <function>change_cb</function>,
(soit <function>begin_cb</function>, <function>change_cb</function>,
<function>commit_cb</function> et <function>message_cb</function>) sont
seulement appelées quand la transaction se termine avec un COMMIT. Les
uniquement appelées quand la transaction se termine avec un COMMIT. Les
changements sont toujours décodés à partir des journaux de transactions,
mais sont seulement passés au plugin de sortie à la validation de la
transaction (et ignorés si la transaction est annulée).
Expand All @@ -1261,7 +1261,7 @@ OutputPluginWrite(ctx, true);</programlisting>
sous contrôle, tous les changements décodés seront transmis au moment de
la validation de la transaction (ou plus précisément quand le COMMIT sera
décodé du journal de transaction). Suivant la taille de la transaction et
la bande passante réseau, le temps de transfert pourrait augmenter de
la bande passante du réseau, le temps de transfert pourrait augmenter de
façon significative le délai du rejeu.
</para>

Expand All @@ -1288,15 +1288,15 @@ OutputPluginWrite(ctx, true);</programlisting>
annulée en utilisant la fonction callback
<function>stream_abort_cb</function>). Si les validations en deux phases
sont supportées, la transaction peut être préparée en utilisant la
fonction callback <function>stream_prepare_cb</function>, la commande da
fonction callback <function>stream_prepare_cb</function>, la commande de
validation <command>COMMIT PREPARED</command> en utilisant la fonction
callback <function>commit_prepared_cb</function>, et la commande
d'annulation en utilisant la fonction callback
<function>rollback_prepared_cb</function>.
</para>

<para>
Une séquence en exemple d'appels de callbacks pour un flux sur une transaction
Une séquence d'exemple d'appels de callbacks pour un flux sur une transaction
pourrait ressembler à ceci&nbsp;:

<programlisting>stream_start_cb(...); &lt;-- début du premier bloc de changements
Expand Down Expand Up @@ -1327,7 +1327,7 @@ commit_prepared_cb(...); &lt;-- commit de la transaction préparée</programlis
</para>

<para>
La séquence réel d'appels de fonctions callback pourrait être plus
La séquence réelle d'appels de fonctions callback pourrait être plus
compliquée bien sûr. Il pourrait y avoir des blocs pour plusieurs
transactions en flux, certaines des transactions pourraient être annulées,
etc.
Expand Down

0 comments on commit 5a4b06a

Please sign in to comment.