Airflow PostgresOperator autocommit多语句事务与回滚疑问
PostgresOperator autocommit 参数行为疑问
当使用Airflow的PostgresOperator时,若将autocommit设为True,并在sql参数中编写两条SQL语句:
SELECT * FROM FILMS; DELETE FROM films USING producers WHERE producer_id = producers.id AND producers.name = 'foo'
请问:
- 这两条语句会被视为两个独立事务分别提交吗?
- 若其中一条语句执行失败,能否实现原子性回滚?
回答
- 当
autocommit=True时,每条SQL语句会作为独立事务执行并自动提交。你编写的SELECT和DELETE会分别开启两个独立的事务,各自执行完成后立即提交。 - 无法实现原子性回滚:由于两条语句分属不同事务,若第一条语句执行成功并提交(即使是查询操作,无数据修改),第二条语句执行失败时,只会回滚当前失败的事务,已提交的第一条事务不会被回滚。如果第一条语句是写操作(如
INSERT/UPDATE),其修改会被永久保留,无法随第二条语句的失败回滚。
内容的提问来源于stack exchange,提问作者moth
相关产品推荐
相关产品推荐

