同一个表上的两个“SELECT FOR UPDATE”语句会导致死锁吗?

2024-04-10

假设两个并发事务在 Postgresql DB 上执行以下查询:

交易A:

SELECT * FROM mytable WHERE id IN (1, 2, 3, 4) FOR UPDATE

交易B:

SELECT * FROM mytable WHERE id IN (6, 3, 2, 1) FOR UPDATE

是否有可能因为Postgresql获取行锁的顺序不一致而导致死锁?例如。如果 Postgresql 按照本例中给出的 id 顺序获取行锁,则可能会出现死锁。

或者 Postgresql 内部是否足够智能,能够始终以同时、离散的方式获取行锁?SELECT FOR UPDATE同一个表上的语句不能彼此死锁(例如,始终按主键的顺序获取行锁)?

如果 PostgreSQLdoesn't自动防止这种死锁的发生,有没有办法修改查询来防止这种情况(例如,如果事实上 Postgresql 按照给定 id 的顺序获取行锁,那么一致地对 id 进行排序应该可以防止死锁)?

谢谢你的帮助!


抱歉,我有另一个答案,但它是错误的。

文档指出 ORDER BY 子句在 FOR UPDATE 子句之前应用。因此,无论选择行的顺序如何,都会获取锁(我已通过测试确认了这一点)。如果您需要以不同的顺序选择它们,您可以使用:

SELECT * FROM (SELECT * FROM table ORDER BY id FOR UPDATE) ORDER BY another_column;

您可能想在 PostgreSQL 上尝试您的问题邮件列表 http://archives.postgresql.org/pgsql-general/.

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

同一个表上的两个“SELECT FOR UPDATE”语句会导致死锁吗? 的相关文章

  • 如何记录数据库代码以查看数据库对象之间的依赖关系? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想为我的宠物项目编写文档 我的 PostgreSQL 数据库中有 30 个表 近 50 个视图和大约 30 个函数 存储过程 我想看
  • 返回年份数组作为年份范围

    我正在尝试查询一个包含以下内容的表character varying 年份列 并将这些年份作为逗号分隔的年份范围字符串返回 年份范围将由数组中存在的连续年份确定 不连续的年份 年份范围应以逗号分隔 数据类型的原因是character var
  • PostgreSQL:比较 json [重复]

    这个问题在这里已经有答案了 众所周知 目前 PostgreSQL 还没有方法来比较两个 json 值 比较就像json json不起作用 但是选角呢json to text before Then select x a y b json t
  • postgresql中数组的区别

    我有两个数组 1 2 3 4 7 6 and 2 3 7 在 PostgreSQL 中可能有共同的元素 我想做的是从第一个数组中排除第二个数组中存在的所有元素 到目前为止我已经取得了以下成果 SELECT array SELECT unne
  • 提高 PostgreSQL 1 亿数据左连接查询性能

    我在用Postgresql 9 2 version Windows 7 64 bit RAM 6GB 这是一个Java企业项目 我必须在我的页面中显示订单相关信息 有三个表通过左连接连接在一起 Tables TV HD 389772 行 T
  • Postgresql 的 SQL_NO_CACHE?

    MySQL 关键字是否有等效的 postgresqlSQL NO CACHE 或 SQL Serverdbcc drop clean buffers 即您可以简单地将其包含在 SQL 语句中或作为脚本的一部分吗 UPDATE 这个问题 查看
  • Postgres:显示继承的字段

    我应该实现什么查询来获取继承的列 读过this http www alberton info postgresql meta info html综合帖子没有找到解决办法 如果我理解正确的话 您想知道作为表之间继承的一部分的列的名称 SELE
  • PostgreSQL:使用for循环迭代表行,根据当前行检索列值

    我有以下2张表 CREATE TABLE salesperson t salespersonid numeric 4 0 NOT NULL salespersonname character varying 25 salespersonte
  • 如何创建不返回任何内容的函数

    我想写一个函数pl pgsql 我在用着Postgres 企业管理器 v3并使用 shell 来创建一个函数 但在 shell 中我必须定义返回类型 如果我不定义返回类型 我将无法创建函数 如何创建一个不返回结果的函数 即创建一个新表的函数
  • java -postgresql 最后插入的 id 插入时未获取

    我有一个插入功能postgresql如下 CREATE OR REPLACE FUNCTION insert orderhead order id integer order dt text customer id integer rout
  • 从 Django 调用 Postgres SQL 存储过程

    我正在开发一个带有 Postgresql 数据库的 Django 项目 我编写了一个可以在 Postgres 上完美运行的存储过程 现在我想从 Django 1 5 调用该存储过程 我已经编写了代码 但它提示错误 CREATE FUNCTI
  • 在 PostgreSql 中计算百分比

    例如我有一个这样的表 string adm A 2 A 1 B 2 A 1 C 1 A 2 通过 SQL 查询 我想要这样的结果 string perc adm A 50 B 100 C 0 我想要每个字符串中数字 2 出现的百分比 我可以
  • 错误关系不存在

    我得到了 error relation causes does not exist 我的节点应用程序出现错误 这种关系确实存在 我不确定问题出在哪里 我创建了该表 CREATE TABLE causes cause id bigint NO
  • 如何加速spark df.write jdbc到postgres数据库?

    我是 Spark 新手 正在尝试使用 df write 加速将数据帧的内容 可以有 200k 到 2M 行 附加到 postgres 数据库 df write format jdbc options url psql url spark d
  • 使用连接池后如何处理过多的并发连接?

    Scenario 假设您有一个拥有大量流量的网站或应用程序 即使使用数据库连接池 性能也会受到真正的打击 站点 应用程序甚至可能崩溃 因为并发连接太多 Question 人们有什么选择来处理这个问题 我的想法 我在想有这个问题的人可以创建多
  • SQL查询查找具有特定数量关联的行

    使用 Postgres 我有一个架构conversations and conversationUsers Each conversation有很多conversationUsers 我希望能够找到具有确切指定数量的对话conversati
  • 如何创建没有循环关系的树形表?

    CREATE TABLE TREE node1 id UUID REFERENCES nodes object id NOT NULL node2 id UUID REFERENCES nodes object id NOT NULL CO
  • PostgreSQL:删除数据库但数据库仍然存在[重复]

    这个问题在这里已经有答案了 我是 PostgreSQL 的新手 我尝试着理解它 我熟悉数据库和MySQL 我正在尝试删除我创建的数据库 因为 psql 似乎忽略了我尝试通过 Django 推送的更改 当我执行时 l我得到以下回复 List
  • JPA 支持查询 Postgres JSON 字段

    JPA 是否已经支持处理 JSON 字段的查询 如下所示 select from person where info gt gt age numeric 40 select from person where info gt gt firs
  • Mac 上用户“postgres”的密码身份验证失败

    我在创建新的 psql 用户时遇到问题 因为我无法以 postgres 身份登录 psql 我已尝试过 1 sudo u postgres psql 2 sudo u postgres createuser img site P s e 他

随机推荐

  • 防止 Django 表单中的 SQL 注入

    我用它来验证 class MyValidationForm forms Form title forms CharField body forms Textarea taxonomy forms IntegerField 这是我基于阶级的观
  • 使用 Google Apps 脚本插入数据验证

    我正在尝试使用 Google Apps 脚本在 Gsheet 中插入单元格内下拉菜单 数据 gt 验证 gt 项目列表 我想这样做是因为每次我使用电子表格时 项目列表 都会略有变化 我不想每次打开电子表格时都必须转到 数据 gt 验证 gt
  • (Wordpress)我如何获取带有 html 标签的帖子的完整内容 - 未剥离

    我在我的网站上使用 WordPress 和 qtranslate 插件 并且尝试在每篇文章中显示语言标志 Qtranslate 将 html 标签插入到内容和标题中 例如 en gt 对于我在每篇文章中使用的每种语言 所以我需要一个条件来检
  • 用于 Java 项目的 NetBeans 远程编辑?

    我的项目使用了 Play 框架 所以我不需要可以编译的编辑器 我通常喜欢 NetBeans 但希望远程编辑服务器上的源文件以节省时间 我还经常在台式机 上网本之间切换进行开发 因此远程编辑可以使我免于同步开发环境 我对 Netbeans 远
  • 如何根据调试标志让 Django 使用两个不同的数据库

    我想在本地环境中使用简单的 SQLite 数据库 并在生产中使用 Postgresql 数据库 如何配置设置文件以根据以下值了解要使用哪个数据库DEBUG 有多种选择 下面是一个非常便宜的解决方案 Django 始终选择名为 default
  • webpack 是否使 ES6 模块兼容 ES5 浏览器?

    如果我使用ES6导入在 JS 文件中 例如 import tempates from templates js webpack 转换这类似于 webpack require r webpack exports harmony import
  • 如何在Azure WebJob函数中执行异步

    我有一个从服务器获取 api 数据的异步方法 当我在本地计算机上的控制台应用程序中运行此代码时 它会高速执行 每分钟在异步函数中推送数百个 http 调用 然而 当我将相同的代码从 Azure WebJob 队列消息触发时 它似乎同步运行
  • Blazor - 如何动态创建组件

    我想测试是否可以动态创建 Blazor 组件 我找不到任何方法来做到这一点 我尝试了一些在上面找到的动态内容这个链接 https learn blazor com pages dynamic content 但最终还没有得到任何结果 根据对
  • 如何设置JFrame中对象的位置?

    我有标签和 JButtons 我想在 JFrame 中定义位置 import java awt import java net InetAddress import java net UnknownHostException import
  • 我需要关闭 std::fstream 吗? [复制]

    这个问题在这里已经有答案了 可能的重复 我需要手动关闭 ifstream 吗 https stackoverflow com questions 748014 do i need to manually close a ifstream 我
  • UIButton 事件。有什么不同?

    我遇到了一个问题 当我的按钮显示从它调用的弹出窗口时 它应该保持 按下 状态 弹出框是某些过滤器的选择器 过滤器显示在按钮本身上 当我点击它并显示弹出窗口时 无论如何它都会被取消选择 我想我必须重新定义它在触摸事件上的行为并使其不响应标准t
  • 如何通过 Ruby 使用 Paypal 的自适应支付 API 来避免身份验证和时间问题?

    我在尝试从 Ruby 访问 Paypal 的自适应支付 API 时遇到了多个问题 我最初遇到的主要问题是 Paypal 要求其 HTTP 标头全部大写 但 Net HTTP 不保留 HTTP 标头的大小写 它将它们 小写 存储 然后输出 大
  • 输入到 C++ 可执行 python 子进程

    我有一个 C 可执行文件 其中包含以下代码行 Do some calculations for int i 0 i
  • Honeycomb 中的上下文操作栏

    我想根据屏幕上选择的内容更改代码中的操作栏按钮 这有点像 Honeycomb Gmail 应用程序 您可以在其中检查一些邮件项目并获得具有不同外观的不同操作栏 知道我该怎么做吗 要获取操作栏项目 请使用获取操作栏 http develope
  • 尝试在空对象引用上调用虚拟方法“android.content.Context android.support.v4.app.FragmentActivity.getApplicationContext()”

    以下是我的片段的代码 我收到上述空异常错误 Created by USer on 09 04 2016 public class FeaturedFragment extends android support v4 app Fragmen
  • 检查浏览器是否支持特定的 MIME 类型?

    我如何检查浏览器是否支持 php 的特定 mime 类型 你可以分析Accept标头字段 http www w3 org Protocols rfc2616 rfc2616 sec14 html sec14 1查看是否列出了该类型或该类型的
  • 什么是 p2 存储库?

    我现在正在开发一个项目几个月 我们使用 p2 repositories 我知道我从他们那里得到了我的依赖 但现在我想更深入地研究这个主题 我想知道 p2 存储库到底是什么 定义 我认为这与 OSGi 和 Nexus 有关 但它从哪里来呢 当
  • iOS6 中的手势识别器和自动布局,从中心缩放

    下面的手势识别器代码通常会从中心缩放视图 但在 iOS6 中启用自动布局时不会 当启用自动布局时 视图似乎从其原点缩放 其他仿射变换 特别是缩放和旋转 也没有按我的预期工作 任何人都遇到这个问题 或者可以启发我处理这个问题的正确方法吗 IB
  • img src 和 jQuery?

    我有一个图像 并使用 jQuery 将其变成了一个按钮 所谓的按钮有两种状态 常规状态和按下状态 使用 jQuery 我检测到 mousedown 和 mouseup 并替换 src 属性 如下所示 btn click function D
  • 同一个表上的两个“SELECT FOR UPDATE”语句会导致死锁吗?

    假设两个并发事务在 Postgresql DB 上执行以下查询 交易A SELECT FROM mytable WHERE id IN 1 2 3 4 FOR UPDATE 交易B SELECT FROM mytable WHERE id