sql >> Base de Datos >  >> RDS >> PostgreSQL

CREAR BASE DE DATOS dentro de la transacción

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".