PostgreSQL a transactionnelle DDL pour la plupart des objets de base de données (certainement des tables, des indices, etc, mais pas de bases de données, les utilisateurs). Toutefois pratiquement n'importe quel DDL obtiendrez un ACCESS EXCLUSIVE
verrou sur l'objet cible, ce qui le rend complètement inaccessible jusqu'à ce que le DDL transaction se termine. Aussi, pas toutes les situations sont très traités - par exemple, si vous essayez de sélectionner à partir de la table foo
tandis qu'une autre opération est en baisse et la création d'une table de remplacement foo
, puis l'a bloqué la transaction vont enfin recevoir une erreur plutôt que de trouver de nouveaux foo
table. (Edit: ceci a été corrigé dans ou avant PostgreSQL 9.3)
CREATE INDEX ... CONCURRENTLY
est exceptionnel, il utilise trois opérations pour ajouter un index à une table, tout en permettant les mises à jour simultanées, de sorte qu'il ne peut lui-même être exécutée dans une transaction.
Aussi la maintenance de la base de commandement VACUUM
ne peut pas être utilisé dans une transaction.