事务隔离级别和锁定记录,对正在运行的事务中的记录禁用 SELECT

2024-03-08

Can I disable SELECT在事务内部使用的行上?

例如,表中的行potatoes在事务 1 中被销毁,并且需要很长时间才能销毁。在交易2中,有SELECT* on the potatoes桌子。我不想选择事务 1 中正在使用的那些记录。

所以,结果为SELECT*土豆没有事务 1 中使用的记录。

Is 可串行化的隔离级别适合事务 1,因此事务 2 无法选择这些行? 或者我需要用一些东西来锁定这些记录锁定模式?

我试图避免数据库或 Redis 中的标志。

我发现的东西:

  • 交易水平在 Rails 中 https://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html#method-i-transaction

  • PostgreSQL 中的事务级别 https://www.postgresql.org/docs/current/transaction-iso.html

  • 悲观锁在 Rails 中 https://api.rubyonrails.org/classes/ActiveRecord/Locking/Pessimistic.html


这是一个奇怪的要求。从逻辑上讲,在您的事务完成之前,土豆不会被删除——毕竟,您仍然可以回滚事务,然后它就从未发生过。重要的是逻辑顺序交易,并且通常假设选择土豆的交易在逻辑上发生是没有问题的before删除交易。

话虽如此,如果您仍然坚持自己的要求,可以按以下方法操作:

删除交易只是简单地使用删除土豆DELETE,但是您使用修改后的查询来选择土豆:

SELECT /* whatever */
FROM potatoes
WHERE /* condition */
FOR SHARE OF potatoes SKIP LOCKED;

与普通的不同SELECT,这个查询将放置一个SHARE锁定所选的每一行。这样的锁不会相互冲突,因此多个这样的查询可以选择相同的土豆。

但是,锁会与EXCLUSIVE的行锁DELETE,因此它无法选择此类行。为了避免遇到这样的行时阻塞,您添加SKIP LOCKED就像我的例子一样。

所有这一切都不是免费的:行锁会修改表行,因此此类查询将导致写入和读取。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

事务隔离级别和锁定记录,对正在运行的事务中的记录禁用 SELECT 的相关文章

  • heroku 上的 bitbucket 私有存储库

    我有一个需要 gem 的 Rails 应用程序 我将这个 gem 托管在私有存储库的 bitbucket 上 在我的 Gemfile 中 我添加了 gem 如下所示 gem my gem git gt gi email protected
  • 处理 Rails 2.1.x 中的 RoutingError 的最佳方法?

    我正在使用Rails 2 1 中的routing rb 代码 并尝试让它达到这样的程度 我可以对找不到合适路径时抛出的RoutingError 异常执行一些有用的操作 这是一个有点棘手的问题 因为有一些 URL 类别纯粹是糟糕的 azenv
  • Rails autoload_paths 中的错误?

    我的代码中遇到一个奇怪的错误 我有一个 Rails 应用程序 库中有以下两个文件 lib module one module two class one rb module ModuleOne module Moduletwo class
  • 使用 SQL 完全复制 postgres 表

    免责声明 这个问题和栈溢出问题类似here https stackoverflow com questions 198141 copy a table including indexes in postgres 但这些答案都不适用于我的问题
  • rake cucumber 和 rake spec 始终使用“开发”环境

    我运行 Cucumber 和 RSpec 测试的 rake 任务始终使用我的development环境 以下是相关的配置文件 RAILS ROOT config environments cucumber rb Edit at your o
  • postgresql中的按日期聚合函数分组

    我在运行此查询时遇到错误 SELECT date updated at count updated at as total count FROM persons WHERE persons updated at BETWEEN 2012 1
  • 使用 Paperclip 保存文件而不上传

    我有一个简短的问题 是否可以保存文件而不实际通过表单上传 例如 假设我正在查看电子邮件中的附件 并且我想使用回形针保存它们 我该怎么做呢 我是否必须在某处手动调用 save file 或类似的东西 任何帮助将非常感激 我有一个 rake 任
  • 如果你使用belongs_to而没有相应的has_one,会发生什么?

    我有一个核心模型Item 以及一个从自定义源 例如 RSS feed 填充它的脚本 在 feed 中 每个项目都用一个标识guid 在我的系统中 项目只有一个自动生成的id首要的关键 我想要 比方说 ItemFeedInfo那个地图guid
  • 更新系统后RubyGems错误

    使用 sudo gem update system 更新 ruby 设置后尝试启动 Rails 控制台时 我尝试通过发出以下命令来执行 Rails 控制台rails c 我收到此错误 Users myusername rvm rubies
  • Ruby on Rails:有关 validates_presence_of 的问题

    我的基于 ActiveRecord 的模型中有一个关系 如下所示 belongs to foo 我的模型应该始终在其中定义 foo 才能有效 我的问题是 当使用 validates presence 时 使用哪一个是合适的 validate
  • Rails3 has_many 关系中子项计数的范围

    尝试在rails3中做一个范围 book has many chapters 我想要 range long 返回超过 10 章的书籍 如何最好地构建这个范围 不使用计数器缓存 thanks 这应该会让你继续 class Book scope
  • PostgreSQL 窗口函数:row_number() over(按 col2 分区 col 顺序)

    以下结果集源自具有一些连接和联合的 SQL 查询 SQL 查询已经对 Date 和 game 上的行进行了分组 我需要一列来描述按日期列分区的游戏的尝试次数 Username Game ID Date johndoe1 Game 1 100
  • 从表单中选择枚举以设置角色

    Ruby on Rails 4 1 我正在将 Devise 与枚举角色一起使用 目前 它在创建用户时使用默认角色 我想在创建用户的表单中添加一个字段来设置枚举角色 I read this https github com RailsApps
  • 从标记访问 json 属性 - gmaps4rails

    我正在升级到 gmaps4rails v2 我似乎无法从 javascript 访问标记 json 属性 这在我使用的先前版本 1 5 6 中有效 具体来说 内置控制器 users User all hash Gmaps4rails bui
  • Rails Structure.sql 和 schema.rb 之间有什么区别

    我知道 schema rb 文件是一个 ruby 文件 它是在运行 rake 迁移时创建和修改的 但是 Structure sql 呢 我在一些项目中看到了 schema rb 在其他项目中看到了 Structure sql 以及在一些这两
  • ActiveAdmin 注册页面和资源列表

    在使用ActiveAdmin register page and ActiveAdmin register 如何获取注册页面和资源的列表 假设您使用的是默认命名空间 admin 您可以对 ActiveAdmin 0 6 1 执行以下操作 r
  • 获取特定时区一天开始时的时间对象

    如何获取代表给定时区特定日期的一天开始时间的 ruby Time 对象 date Date today date to time in time zone America New York beginning of day 目前输出 gt
  • 查找日期时间与今天日期匹配的记录 - Ruby on Rails

    我有一个交易表 需要查找日期与今天的日期匹配的记录 从 Rails 控制台 我需要匹配的日期字段如下所示 我已经分配了一条记录来进行测试 ruby 1 9 2 p0 gt deal start gt Tue 10 May 2011 00 0
  • Postgres 按查询分组

    我正在尝试在 postgres 的查询中使用 group by 我无法让它按照我想要的方式工作 以便根据需要对结果进行分组 这是另一个堆栈问题的扩展我刚刚回答过的递归查询 https stackoverflow com questions
  • 如何从另一个 .rb 文件访问模块内和类内的 Ruby 方法

    我想知道如何从另一个 rb 文件访问此模块中的方法 module Decisioning module Decision class OfferProxy lt FinanceApplication Offer def my method

随机推荐

  • 在 C# 中反转 md5 哈希算法 [重复]

    这个问题已经存在了 可能的重复 反转 MD5 哈希值 https stackoverflow com questions 1471654 reversing an md5 hash 在c 中给出这个方法 public string Calc
  • 在管道 grep 到 grep 后保留颜色

    有一个类似的问题grep 后保留 ls 颜色 https stackoverflow com questions 867877 preserve ls colouring after greping但令我烦恼的是 如果将彩色 grep 输出
  • 在报表生成器/SSRS 中的每个页面上重复垂直线

    我希望在报告的每一页上都包含一条垂直线 该线从报告正文的顶部延伸到底部 我怎样才能实现这个目标 我尝试过使用 RepeatWith 但它似乎不起作用 该行仅出现在第一页上 Thanks 这仅仅是为了外观和感觉的目的吗 我会用这样的线创建一个
  • Scalacheck 不会正确报告失败的情况

    我写了以下规范 An IP4 address should belong to just one class in val addrs for a lt Gen choose 0 255 b lt Gen choose 0 255 c lt
  • 有 jQuery jEditable 多选插件吗?

    我正在使用优秀的j可编辑 http www appelsiini net projects jeditable用于在我的页面上进行一些就地编辑的插件 有一个地方我需要一个多选元素 有没有 jEditable 插件可以让我做到这一点 我一直在
  • c++ boost::bind 存储不同类型的函数指针

    我今天查了很多资料 却一无所获 有什么方法可以存储从 boost bind 不同类型返回的仿函数吗 我找到了一个使用 boost variants 的示例 但不确定是否需要这样做 为简单起见 Foo 和 Bar 已被简化 include
  • 哪种适用于 Node.js 的 MySQL 驱动程序可以在 Windows 上运行?

    我想在 Windows 上将 MySQL 与 Node js 一起使用 我尝试过使用节点数据库mysql https github com mariano node db mysql 不过好像不支持Windows 是否还有其他适用于 Win
  • 每 X 时间运行一次后台任务

    我想启动一项服务 偶尔在所有平台上检查是否有通知出现 有没有连接所有平台的nuget或者一些例子 您可以使用Device StartTimer TimeSpan minutes 方法启动一个后台任务 该任务将在给定的时间跨度后重复 这是一个
  • JavaFX 中的可复制标签/文本字段/LabeledText

    我只想在 JavaFX 中创建可复制的标签 我尝试创建没有背景 没有焦点边框和默认背景颜色的 TextField 但没有成功 我发现了很多关于如何从控制中删除焦点背景的问题 但所有这些看起来都像是 黑客 是否有任何标准解决方案来实现可复制文
  • Eclipse 4.2 和 Java 8

    我找到了这个page http www eclipse org eclipse development plans eclipse project plan 4 2 xml声明 Java 8 对 Juno 的支持已推迟 但我找不到更多信息
  • 使用 C# 解析 JSON 数据

    我有大约 7000 行 JSON 数据需要解析 可以看到仅部分示例here https graph facebook com 367501354973 access token 2227470867 7C2 fYhXYnFbw5vb6GXN
  • 在选择选项中使用@click - Vue.js 2

    我想在选择选项中使用 click 到目前为止我有
  • 使用 HoloEverywhere 构建 Android Studio 项目失败

    每当我尝试构建包含 HoloEverywhere 作为依赖项的项目时 我都会遇到以下错误 Gradle 失败 构建因异常而失败 出了什么问题 任务 HoloEverywhere Library processDebugManifest 执行
  • 意外结果 - Google Autocomplete 针对约克郡

    我使用 Google 地图自动完成 API 得到针对 约克郡 的意外结果 我已过滤结果以仅显示英国地区 请帮我 以下是我在搜索约克郡时得到的结果 北约克郡 Royaume Uni 约克郡东方 Reino Unido 南约克郡 统一王国 下面
  • Java 中的类型转换以及动态类型与静态类型

    我正在学习静态类型与动态类型 并且我已经了解了它的大部分内容 但这种情况仍然让我困惑 如果上课B延伸A 我有 A x new B 是否允许以下 行为 B y x 或者是否需要显式转换 B y B x Thanks 显式转换是required
  • 如何退出 Google 云端硬盘帐户?

    如何退出 Google 云端硬盘服务 我不想切换帐户 而是最终退出 我正在开发一个应用程序 该应用程序将使用用户的 Google 云端硬盘存储以及其他存储服务 因此我需要允许用户退出 Google Drive 我发现这有效 这些与我使用的登
  • 如何验证 HTML5 日期格式

    我想使用 HTML5 日期输入字段
  • Tomcat 7 - Maven 插件?

    我只是想仔细检查一下 是否有人找到或正在开发 Tomcat 7 插件 如果没有 有人有兴趣帮助我启动和运行它吗 我想要 Glassfish 的另一个快速替代品 JBoss AS 6 0 对于快速模型来说仍然有点重 Walter 它对我来说如
  • malloc(sizeof(int)) vs malloc(sizeof(int *)) vs (int *)malloc(sizeof(int))

    我承认这三个都有不同的含义 但是 我不明白这些都适用于哪些特定情况 任何人都可以分享每个例子吗 谢谢 malloc sizeof int malloc sizeof int int malloc sizeof int malloc size
  • 事务隔离级别和锁定记录,对正在运行的事务中的记录禁用 SELECT

    Can I disable SELECT在事务内部使用的行上 例如 表中的行potatoes在事务 1 中被销毁 并且需要很长时间才能销毁 在交易2中 有SELECT on the potatoes桌子 我不想选择事务 1 中正在使用的那些