Cuando lo intentas, obtienes el error:
ERROR: CREATE DATABASE cannot run inside a transaction block
Esto viene de src/backend/access/transam/xact.c
(línea 3023 en mis fuentes, pero varía según la versión), en PreventTransactionChain(...)
.
El comentario allí explica que:
Para CREATE DATABASE
se llama desde src/backend/tcop/utility.c
en standard_ProcessUtility
bajo el caso de T_CreatedbStmt
, pero desafortunadamente no hay ningún comentario informativo que diga por qué específicamente CREATE DATABASE
no es seguro ejecutarlo en una transacción.
Mirando las fuentes, puedo ver que, por un lado, fuerza un punto de control.
Sin embargo, en general, no veo nada que realmente grite "no podemos hacer esto transaccionalmente". Es más "no hemos implementado la funcionalidad para hacer esto transaccionalmente".