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