Når du prøver det, får du fejlen:
ERROR: CREATE DATABASE cannot run inside a transaction block
Dette kommer fra src/backend/access/transam/xact.c
(linje 3023 på mine kilder, men varierer efter version), i PreventTransactionChain(...)
.
Kommentaren der forklarer, at:
For CREATE DATABASE
det kaldes fra src/backend/tcop/utility.c
i standard_ProcessUtility
under sagen for T_CreatedbStmt
, men der er desværre ikke nogen informativ kommentar, der siger hvorfor specifikt CREATE DATABASE
er ikke sikkert at køre i en transaktion.
Når jeg ser på kilderne, kan jeg se, at det for det første tvinger et kontrolpunkt.
Overordnet set kan jeg dog ikke se noget, der virkelig skriger "vi kan ikke gøre det her transaktionsmæssigt". Det er mere "vi har ikke implementeret funktionaliteten til at gøre dette transaktionelt".