Когато го опитате, получавате грешката:
ERROR: CREATE DATABASE cannot run inside a transaction block
Това идва от src/backend/access/transam/xact.c
(ред 3023 в моите източници, но варира според версията), в PreventTransactionChain(...)
.
Коментарът там обяснява следното:
За CREATE DATABASE
извиква се от src/backend/tcop/utility.c
в standard_ProcessUtility
под случая за T_CreatedbStmt
, но за съжаление няма информативен коментар, който да казва защо конкретно CREATE DATABASE
не е безопасно да се изпълнява в транзакция.
Като гледам източниците, виждам, че от една страна налага контролна точка.
Като цяло обаче не виждам нищо, което наистина да крещи „не можем да направим това транзакционно“. Това е по-скоро „не сме внедрили функционалността да правим това транзакционно“.