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".