PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

CREATE DATABASE dentro da transação


Ao tentar, você recebe o erro:
ERROR:  CREATE DATABASE cannot run inside a transaction block

Isso vem de src/backend/access/transam/xact.c (linha 3023 em minhas fontes, mas varia de acordo com a versão), em PreventTransactionChain(...) .

O comentário lá explica que:

Para CREATE DATABASE é chamado de src/backend/tcop/utility.c em standard_ProcessUtility no caso de T_CreatedbStmt , mas infelizmente não há nenhum comentário informativo que diga por que especificamente CREATE DATABASE não é seguro para executar em uma transação.

Olhando para as fontes, posso ver que, por um lado, força um ponto de verificação.

No geral, porém, não vejo nada que realmente grite "não podemos fazer isso transacionalmente". É mais "não implementamos a funcionalidade para fazer isso transacionalmente".