默认autocommit下调用PostgreSQL PL/pgSQL函数是否为单个事务?
调用next_work_item()函数的事务属性说明
你的调用操作会被视为单个独立事务,具体原因如下:
- JDBC层的默认
autocommit配置为true,doobie作为基于JDBC封装的Scala库,默认继承该配置不会主动修改。该配置规则下,每一条独立执行的SQL语句都会被自动包裹在独立事务中:语句执行成功则自动提交,执行出错则自动回滚,不需要手动做事务操作。 - PostgreSQL 12.x的规则中,单条SQL调用PL/pgSQL函数的场景下,函数内部所有的读写逻辑都会归属到当前SQL对应的事务中,不存在函数逻辑脱离当前语句事务的情况。
- 只有当你在doobie中显式用
.transactionally等操作开启事务块,将多条SQL包裹在同一个事务上下文中时,该函数调用才会归属到你手动创建的事务中。默认场景下的单条函数调用完全符合autocommit的单事务规则。
内容的提问来源于stack exchange,提问作者sumek
相关产品推荐
相关产品推荐

