[seata]pgsql DDL语句 不回滚

2024-02-02 360 views
7

seata1.6.1默认AT模式, pgsql 13 版本, DDL语句 CREATE TABLE 不会被回滚,@Transactional可以,@GlobalTransactional不行,这是为什么?

pgsql本身是支持DDL回滚的.

回答

2

这个ddl语句应该会直接被拦截下来,如果你确定用的是datasourceproxy里的连接进行ddl操作的话那么这个就是个bug需要做拦截处理,个人认为ddl的undo代价太大,而且一般情况下也不涉及一个分布式事务下使用ddl,如果你有定时分表或动态创建表的功能完全可以用本地事务,这个行为应该是不牵涉分布式场景下,在一些dml后,又ddl,再跨服务调用之类的

5

目前我们的确有这样的场景,A服务操作数据,B服务根据数据进行DDL建表。如果本地事务的话是不是就没法统一回滚了,毕竟在不同的服务里面。

8

DDL语句在数据库中也不是本地事务实现,Seata未来也不会支持这种场景。但是可以对相关语句在运行中给予提示。

6

了解,这块想办法手动处理一下