PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

CREA DATABASE all'interno della transazione

Quando lo provi, ricevi l'errore:

ERROR:  CREATE DATABASE cannot run inside a transaction block

Questo viene da src/backend/access/transam/xact.c (riga 3023 sui miei sorgenti, ma varia in base alla versione), in PreventTransactionChain(...) .

Il commento lì spiega che:

Per CREATE DATABASE viene chiamato da src/backend/tcop/utility.c in standard_ProcessUtility nel caso di T_CreatedbStmt , ma sfortunatamente non c'è alcun commento informativo che spieghi perché in particolare CREATE DATABASE non è sicuro da eseguire in una transazione.

Guardando le fonti, posso vedere che per prima cosa forza un checkpoint.

Nel complesso, però, non vedo nulla che urli davvero "non possiamo farlo a livello transazionale". È più "non abbiamo implementato la funzionalità per farlo in modo transazionale".