我正在开发一个发布DDL的程序。我想知道是否CREATE TABLE可以回滚和类似的DDLPostgres的MySQLSQLite的等描述每个数据库如何使用DDL处理事务。
3 回答
有只小跳蛙
TA贡献1824条经验 获得超8个赞
PostgreSQL对大多数数据库对象(某些表,索引等,但没有数据库,用户)具有事务性DDL。但是实际上,任何DDL都会ACCESS EXCLUSIVE
锁定目标对象,从而使其完全无法访问,直到DDL事务完成。同样,并非所有情况都得到了很好的处理-例如,如果您尝试foo
在另一个事务删除它并创建替换表的同时从表中进行选择foo
,那么被阻塞的事务将最终收到错误,而不是查找新foo
表。(编辑:此问题已在PostgreSQL 9.3或更高版本中修复)
CREATE INDEX ... CONCURRENTLY
例外,它使用三个事务在允许并发更新的同时向表添加索引,因此它本身不能在事务中执行。
另外,数据库维护命令VACUUM
不能在事务中使用。
- 3 回答
- 0 关注
- 1105 浏览
添加回答
举报
0/150
提交
取消