Saat Anda mencobanya, Anda mendapatkan kesalahan:
ERROR: CREATE DATABASE cannot run inside a transaction block
Ini berasal dari src/backend/access/transam/xact.c
(baris 3023 pada sumber saya, tetapi bervariasi menurut versi), di PreventTransactionChain(...)
.
Komentar di sana menjelaskan bahwa:
Untuk CREATE DATABASE
itu dipanggil dari src/backend/tcop/utility.c
di standard_ProcessUtility
di bawah kasus T_CreatedbStmt
, tapi sayangnya tidak ada komentar informatif yang mengatakan mengapa secara khusus CREATE DATABASE
tidak aman untuk dijalankan dalam suatu transaksi.
Melihat sumbernya, saya dapat melihat bahwa untuk satu hal itu memaksa pos pemeriksaan.
Namun, secara keseluruhan, saya tidak melihat apa pun yang benar-benar meneriakkan "kita tidak dapat melakukan ini secara transaksional". Ini lebih "kami belum menerapkan fungsionalitas untuk melakukan ini secara transaksional".