PREPARE TRANSACTION |
Prépare la transaction |
PostgreSQL |
Syntaxe
PREPARE TRANSACTION transaction_id
|
Paramètres
Nom |
Description |
transaction_id |
Ce paramètre permet d'indiquer un identificateur arbitraire identifiant plus tard cette transaction pour COMMIT PREPARED ou ROLLBACK PREPARED. L'identificateur doit être écrit sous forme de chaîne de caractères littérale et doit faire moins de 200 octets. Il ne doit pas être le même que l'identificateur utilisé pour toute transaction actuellement préparée. |
Description
Cette instruction permet de préparer la transaction en cours pour un commit en deux phases.
Remarques
- L'instruction PREPARE TRANSACTION prépare la transaction en cours pour une validation en deux phases. Après cette commande, la transaction n'est plus associée à la session en cours ; au lieu de cela,
son état est entièrement entreposé sur le disque, et il y a une très forte probabilité qu'il puisse être validé avec succès, même si un plantage de la base de données se produit avant que la validation ne soit
demandée.
- Une fois préparée, une transaction peut ensuite être validée ou annulée avec COMMIT PREPARED ou ROLLBACK PREPARED, respectivement. Ces commandes peuvent être émises à partir
de n'importe quelle session, pas seulement celle ayant exécuté la transaction d'origine.
- Du point de vue de la session émettrice, PREPARE TRANSACTION n'est pas sans rappeler une commande ROLLBACK : après son exécution, il n'y a plus de transaction
en cours active, et les effets de la transaction préparée ne sont plus visibles. (Les effets redeviendront visibles si la transaction est validée.)
- Si la commande PREPARE TRANSACTION échoue pour une raison quelconque, elle devient un ROLLBACK : la transaction en cours est annulée.
- L'instruction PREPARE TRANSACTION n'est pas destiné à être utilisé dans des applications ou des sessions interactives. Son objectif est de permettre à un gestionnaire de transactions externe
d'effectuer des transactions globales atomiques sur plusieurs bases de données ou d'autres ressources transactionnelles. À moins que vous n'écriviez un gestionnaire de transactions, vous ne devriez
probablement pas utiliser PREPARE TRANSACTION.
- Cette commande doit être utilisée à l'intérieur d'un bloc de transaction. Utilisez BEGIN pour en démarrer un.
- Il n'est actuellement pas autorisé de PREPARE une transaction ayant exécuté des opérations impliquant des tables temporaires ou l'espace de noms temporaire de la session,
créé des curseurs WITH HOLD ou exécuté LISTEN, UNLISTEN ou NOTIFY. Ces fonctionnalités sont trop étroitement liées à
la session en cours pour être utiles dans une transaction à préparer.
- Si la transaction a modifié des paramètres d'exécution avec SET (sans l'option LOCAL), ces effets persistent après PREPARE TRANSACTION et ne seront pas affectés
par un COMMIT PREPARED ou ROLLBACK PREPARED ultérieur. Ainsi, à cet égard, PREPARE TRANSACTION agit plus comme
COMMIT que ROLLBACK.
- Toutes les transactions préparées actuellement disponibles sont répertoriées dans la vue système pg_prepared_xacts.
- Il est imprudent de laisser les transactions dans l'état préparé pendant une longue période. Cela interférera avec la capacité de VACUUM à récupérer
l'entreposage et, dans des cas extrêmes, pourrait provoquer l'arrêt de la base de données pour empêcher le bouclage de l'identificateur de transaction. Gardez également à l'esprit que la transaction continue
de détenir les verrous qu'elle détenait. L'utilisation prévue de la fonctionnalité est qu'une transaction préparée sera normalement validée ou annulée dès qu'un gestionnaire de transactions externe a
vérifié que d'autres bases de données sont également prêtes à être validées. Si vous n'avez pas configuré de gestionnaire de transactions externe pour suivre les transactions préparées et vous assurer
qu'elles sont clôturées rapidement, il est préférable de désactiver la fonction de transaction préparée en définissant max_prepared_transactions sur zéro. Cela empêchera la création accidentelle
de transactions préparées pouvant ensuite être oubliées et éventuellement causer des problèmes.
Dernière mise à jour : Jeudi, le 14 Octobre 2021