PostgreSQL中ROLLBACK TO SAVEPOINT是否会误删数据?
关于PostgreSQL保存点(SAVEPOINT)的回滚范围说明
放心,ROLLBACK TO SAVEPOINT绝对不会影响其他连接的操作,也不会改动同连接里已经提交的数据,具体原因如下:
数据库连接完全隔离:每个数据库连接都拥有独立的事务上下文,其他连接的所有操作(无论是否提交)都和当前连接的事务操作相互隔离。PostgreSQL默认的事务隔离级别(READ COMMITTED)会保证这一点,你完全不用担心误操作其他连接的数据。
保存点仅作用于当前未提交事务:
SAVEPOINT是在你当前正在运行的事务内部创建的标记,ROLLBACK TO SAVEPOINT只会撤销该标记之后你在当前事务中执行的修改,标记之前的操作不会被回滚。而且一旦事务提交,该事务内的所有保存点都会失效,不会对后续事务产生影响。适配Postgraphile场景:你提到解析器内部调用GraphQL会自动提交SQL,使用保存点正好可以在单个解析器的事务内实现部分回滚——如果某个步骤执行出错,只回滚该步骤的操作,不会影响之前已完成的操作,也不会干扰其他解析器或其他连接中已经提交的数据,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Chris Sherriff
相关产品推荐
相关产品推荐

