为了QA目的,我试图获得Postgresql数据库(特别是在一个名为orders的表上)的无限期锁。简而言之,我想知道表上的某些锁是否阻止或无限期地阻止数据库迁移以添加列(我认为ALTER TABLE
获取了一个ACCESS EXCLUSIVE LOCK
)。
我的计划是:
一个人会怎么做?如何通过Rails控制台获取名为orders的表上的行锁?不然我怎么能这么做?
我的计划有意义吗?
更新
实际上,开放的行级事务会阻塞ALTER语句,这些语句获取访问独占锁,比如添加列的表迁移。例如,当我在一个进程中运行此代码时:
Order.first.with_lock do
binding.pry
end
它阻止我在另一个进程中迁移,以便向orders表中添加列。这种迁移的访问独占锁阻塞了对orders表的所有读取和选择语句,给最终用户带来了问题。
为什么会这样呢?
发布于 2017-08-17 17:38:29
假设您在一个事务中,从带有各种where子句的表中选择行。在此过程中,其他一些事务向该表添加了一列。现在,您将得到比以前更多的字段。您的应用程序应该如何处理这个问题?
https://stackoverflow.com/questions/45740381
复制相似问题