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”.