Gdy spróbujesz, pojawi się błąd:
ERROR: CREATE DATABASE cannot run inside a transaction block
Pochodzi z src/backend/access/transam/xact.c
(wiersz 3023 w moich źródłach, ale różni się w zależności od wersji), w PreventTransactionChain(...)
.
Komentarz wyjaśnia, że:
Dla CREATE DATABASE
jest wywoływany z src/backend/tcop/utility.c
w standard_ProcessUtility
w przypadku T_CreatedbStmt
, ale niestety nie ma żadnego komentarza informacyjnego, który wyjaśniałby, dlaczego konkretnie CREATE DATABASE
nie jest bezpieczne do uruchomienia w transakcji.
Patrząc na źródła, widzę, że po pierwsze wymusza to punkt kontrolny.
Ogólnie rzecz biorąc, nie widzę niczego, co naprawdę krzyczałoby „nie możemy tego zrobić transakcyjnie”. Chodzi raczej o to, że „nie zaimplementowaliśmy funkcjonalności do robienia tego transakcyjnie”.