Když to zkusíte, zobrazí se chyba:
ERROR: CREATE DATABASE cannot run inside a transaction block
Toto pochází z src/backend/access/transam/xact.c
(řádek 3023 na mých zdrojích, ale liší se podle verze), v PreventTransactionChain(...)
.
Komentář tam vysvětluje, že:
Pro CREATE DATABASE
volá se z src/backend/tcop/utility.c
v standard_ProcessUtility
pod případem T_CreatedbStmt
, ale bohužel zde není žádný informativní komentář, který by říkal, proč konkrétně CREATE DATABASE
není bezpečné spustit v transakci.
Když se podívám na zdroje, vidím, že to za prvé vynutí kontrolní bod.
Celkově však nevidím nic, co by skutečně křičelo „tohle nemůžeme udělat transakční“. Je to spíše „neimplementovali jsme funkci, abychom to provedli transakční“.