首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为QA目的在Rails (postgres数据库)中获得无限期锁定数据库?

如何为QA目的在Rails (postgres数据库)中获得无限期锁定数据库?
EN

Stack Overflow用户
提问于 2017-08-17 16:22:10
回答 1查看 209关注 0票数 0

为了QA目的,我试图获得Postgresql数据库(特别是在一个名为orders的表上)的无限期锁。简而言之,我想知道表上的某些锁是否阻止或无限期地阻止数据库迁移以添加列(我认为ALTER TABLE获取了一个ACCESS EXCLUSIVE LOCK)。

我的计划是:

  1. 在orders表上抓取表锁或行锁
  2. 运行迁移以添加列(获取访问排他锁的ALTER语句)
  3. 发出一个read语句,查看(2)是否被阻塞(访问排他锁块读取,因此这将是我试图进行QA的一个问题)。

一个人会怎么做?如何通过Rails控制台获取名为orders的表上的行锁?不然我怎么能这么做?

我的计划有意义吗?

更新

实际上,开放的行级事务会阻塞ALTER语句,这些语句获取访问独占锁,比如添加列的表迁移。例如,当我在一个进程中运行此代码时:

代码语言:javascript
运行
复制
 Order.first.with_lock do
    binding.pry
 end

它阻止我在另一个进程中迁移,以便向orders表中添加列。这种迁移的访问独占锁阻塞了对orders表的所有读取和选择语句,给最终用户带来了问题。

为什么会这样呢?

EN

回答 1

Stack Overflow用户

发布于 2017-08-17 17:38:29

假设您在一个事务中,从带有各种where子句的表中选择行。在此过程中,其他一些事务向该表添加了一列。现在,您将得到比以前更多的字段。您的应用程序应该如何处理这个问题?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45740381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档