锁定新插入的行 [PostgreSQL]

4
有没有办法锁定最近插入的行,以便其他事务在我当前的事务仍在进行中时不会看到它?

2
如果在事务中执行INSERT操作,除非该事务发出COMMIT命令,否则其他连接将看不到它。无需执行任何额外的锁定操作。 - jmelesky
谢谢,是的,我刚刚意识到了!对于所有隔离级别,它都有这种行为。 - Zanko
1个回答

6

你不需要这样做。事实上,你不能有相反的行为。在事务提交之前,没有办法使你新插入的行可见。

尽管对于并发的SELECT而言,它是不可见的,但仍然会影响并发的INSERT(或UPDATE)。具体而言,如果你尝试在两个不同的事务中插入相同的值到唯一索引中,其中一个事务将被阻塞,直到另一个事务提交或回滚。然后它将决定是否需要引发唯一违规错误,或者是否可以继续进行。因此,尽管你无法直接看到未提交的数据,但有时你可以看到其副作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接