Khi bạn thử nó, bạn gặp lỗi:
ERROR: CREATE DATABASE cannot run inside a transaction block
Điều này đến từ src/backend/access/transam/xact.c
(dòng 3023 trên các nguồn của tôi, nhưng thay đổi theo phiên bản), trong PreventTransactionChain(...)
.
Nhận xét ở đó giải thích rằng:
Đối với CREATE DATABASE
nó được gọi từ src/backend/tcop/utility.c
trong standard_ProcessUtility
trong trường hợp cho T_CreatedbStmt
, nhưng rất tiếc là không có bất kỳ nhận xét cung cấp thông tin nào cho biết cụ thể tại sao CREATE DATABASE
không an toàn để chạy trong một giao dịch.
Nhìn vào các nguồn, tôi có thể thấy rằng đối với một điều, nó buộc một trạm kiểm soát.
Mặc dù vậy, nhìn chung, tôi không thấy bất cứ điều gì thực sự hét lên rằng "chúng tôi không thể thực hiện giao dịch này". Đó là "chúng tôi chưa triển khai chức năng để thực hiện giao dịch này".