PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

CRÉER UNE BASE DE DONNÉES dans la transaction

Lorsque vous l'essayez, vous obtenez l'erreur :

ERROR:  CREATE DATABASE cannot run inside a transaction block

Cela vient de src/backend/access/transam/xact.c (ligne 3023 sur mes sources, mais varie selon la version), dans PreventTransactionChain(...) .

Le commentaire qui s'y trouve explique que :

Pour CREATE DATABASE il est appelé depuis src/backend/tcop/utility.c dans standard_ProcessUtility sous la casse pour T_CreatedbStmt , mais malheureusement il n'y a aucun commentaire informatif qui dit pourquoi spécifiquement CREATE DATABASE n'est pas sûr à exécuter dans une transaction.

En regardant les sources, je peux voir que, d'une part, cela force un point de contrôle.

Dans l'ensemble, cependant, je ne vois rien qui crie vraiment "nous ne pouvons pas faire cela de manière transactionnelle". C'est plus "nous n'avons pas implémenté la fonctionnalité pour faire cela de manière transactionnelle".