如果ABC表更新在同一点运行,那么select也开始在同一个表上运行,在postgresql中会先占用吗?
答案 0 :(得分:0)
好的,我想我知道你在问什么。
当您更新某些内容时,在您提交该交易之前,其他任何内容都不会显示。当您更新某些内容并且需要一段时间时,它不应该阻止对相同内容的任何选择。
因此,如果您开始10分钟的更新,然后有人开始他们的2分钟选择,他们将看到旧数据,并且不会被阻止。更新将继续,不会中断。更新完成后,如果有人再次启动2分钟选择,他们将看到新数据。
这会回答你的问题吗?
如果您感兴趣,原因是postgresql使用MVCC。基本上这意味着当您更新行时,会写入这些行的新副本。在新副本上,postgres指示哪些事务可以查看新数据。旧的数据很好,并且还有关于什么交易可以看到它的信息。
当您选择时,postgres会检查表格,并查看当前事务中您可以看到哪些行。它只返回你可以看到的行。
当没有更多的交易可以看到一行时,postgres知道它可以被删除,并将收回该空间。