試してみると、エラーが発生します:
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
の理由を説明する有益なコメントはありません。 トランザクションで実行するのは安全ではありません。
ソースを見ると、1つにはチェックポイントが強制されていることがわかります。
しかし、全体として、「これをトランザクションで実行することはできません」と本当に叫ぶものは何も見当たりません。それは、「これをトランザクションで実行する機能を実装していない」ということです。