När du provar det får du felmeddelandet:
ERROR: CREATE DATABASE cannot run inside a transaction block
Detta kommer från src/backend/access/transam/xact.c
(rad 3023 på mina källor, men varierar beroende på version), i PreventTransactionChain(...)
.
Kommentaren där förklarar att:
För CREATE DATABASE
det anropas från src/backend/tcop/utility.c
i standard_ProcessUtility
under fallet för T_CreatedbStmt
, men tyvärr finns det ingen informativ kommentar som säger varför specifikt CREATE DATABASE
är inte säkert att köra i en transaktion.
När jag tittar på källorna kan jag se att det för det första tvingar fram en kontrollpunkt.
Sammantaget ser jag dock ingenting som verkligen skriker ut "vi kan inte göra det här transaktionsmässigt". Det är mer "vi har inte implementerat funktionaliteten för att göra detta transaktionellt".