ben*_*rre 14 sql postgresql ddl transactions
我知道在MySQL ddl语句中,例如alter table/create table/etc会导致隐式事务提交.
当我们转向PostgreSQL时,是否可以在事务中包装多个DDL语句?
这将使迁移脚本更加健壮,失败的DDL更改将导致所有内容回滚.
Gar*_*ary 20
DDL语句由事务涵盖.我在官方文档中找不到相关部分,但提供了一个指向wiki的链接.
只记得在postgresql中不会自动打开事务,你必须用BEGIN
或者启动它们START TRANSACTION
.
关于Transactional DDL的Postgresql Wiki
Igo*_*nko 17
并非每个Postgres DDL语句都可以包含在事务中.像DROP DATABASE
/ DROP TABLESPACE
和其他一些与文件系统相关的无法回滚的语句.
也:
ALTER TYPE ... ADD VALUE(向枚举类型添加新值的表单)无法在事务块内执行.
还有一些声明TRUNCATE
是'不是MVCC保存'.由这种语句进行的更改可能会影响其他查询,即使它们已回滚.
所以 - 阅读你的postgres版本的官方手册,看看你的DDL是否是交易安全的.