Als je het probeert, krijg je de foutmelding:
ERROR: CREATE DATABASE cannot run inside a transaction block
Dit komt van src/backend/access/transam/xact.c
(regel 3023 op mijn bronnen, maar verschilt per versie), in PreventTransactionChain(...)
.
De opmerking daar legt uit dat:
Voor CREATE DATABASE
het wordt aangeroepen vanaf src/backend/tcop/utility.c
in standard_ProcessUtility
onder de zaak voor T_CreatedbStmt
, maar helaas is er geen informatieve opmerking die zegt waarom specifiek CREATE DATABASE
is niet veilig om een transactie uit te voeren.
Als ik naar de bronnen kijk, zie ik dat het onder meer een checkpoint forceert.
Over het algemeen zie ik echter niets dat echt schreeuwt:"we kunnen dit niet op transactiebasis doen". Het is meer "we hebben de functionaliteit niet geïmplementeerd om dit transactioneel te doen".