关于psycopg2上交易的问题



如果我有一个在数据库中保存数据的事务,但该事务是另一个事务的一部分,该事务需要该数据的id(fk)来创建新数据,但此时发生错误,所有事务都回滚还是只回滚最后一个事务?

它们都将回滚,除非您设置保存点。"交易中的交易"实际上是同一个事务。普通的ROLLBACK将恢复所有内容,即使设置了保存点。ROLLBACK TO savepoint只会撤销从该点开始发生的操作,保留之前生效的所有操作,仍然在同一个事务中。

下面是一个演示-观察表的状态与事务id的比较。

Psycopg2让你cur.execute('SAVEPOINT s1'),然后cur.execute('ROLLBACK TO s1')

最新更新