根据 postgresql 文档;
CREATE DATABASE cannot be executed inside a transaction block.
这有技术原因吗?
最佳答案
当你尝试它时,你会得到错误:
ERROR: CREATE DATABASE cannot run inside a transaction block
这来自 src/backend/access/transam/xact.c
(我的源代码中的第 3023 行,但因版本而异),在 PreventTransactionChain(...)
。
那里的评论解释说:
This routine is to be called by statements that must not run inside a transaction block, typically because they have non-rollback-able side effects or do internal commits.
对于 CREATE DATABASE
,在 T_CreatedbStmt< 的情况下,它是从
,但不幸的是,没有任何信息性评论说明为什么 standard_ProcessUtility
中的 src/backend/tcop/utility.c
调用的CREATE DATABASE
在事务中运行不安全。
查看源代码,我可以看到一方面它强制检查点。
不过,总的来说,我没有看到任何真正大声疾呼“我们不能以事务方式执行此操作”的内容。更多的是“我们还没有实现以事务方式执行此操作的功能”。
关于postgresql - 在事务中创建数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22934602/