问题标签 [select-for-update]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - Postgres SELECT COUNT ... 更新
这是我正在尝试做的伪代码:
除了并发问题,我可以正常工作。当同时从多个会话运行时,两个会话都选择并因此更新相同的东西:(
我可以通过在它的 SELECT 子查询中添加 FOR UPDATE 来获得第二个查询原子。但我不能将 FOR UPDATE 添加到第一个查询,因为聚合函数不允许 FOR UPDATE
我怎样才能使这件作品成为原子交易?
java - 使用 JDBC 选择“更新”?
我想for update
使用 JDBC 在 Java 中创建一个 select 语句,但不确定如何完成。
如果您对更新不熟悉,可以在这里阅读 https://www.postgresql.org/docs/9.0/static/sql-select.html#SQL-FOR-UPDATE-SHARE
例如,我有以下选择语句
我的选择语句
我的更新声明
在使用 JDBC 时如何在 Java 中完成此操作for update
?
python - psycopg2“选择更新”
我正在使用 psycopg2 将 Postgresql 与 Python 一起使用,但我不确定如何获得“选择更新”查询来使用它。除了 psycopg2,我还可以使用其他东西。如何使用 Python 创建用于更新查询的 postgresql 选择?
voltdb - VoltDB 支持 SELECT FOR UPDATE 吗?
VoltDB 支持 Oracle、PostgreSQL 和 MySQL 中的 SELECT FOR UPDATE 还是有不同的机制来阻止记录更新?
postgresql - Postgres:SELECT FOR UPDATE 在锁定释放后看不到新行
尝试在我的应用程序中支持 PostgreSQL DB,发现这种奇怪的行为。
准备:
假设两个并发事务(Autocommit=false, READ_COMMITTED)TX1和TX2:
TX1:
TX2:
现在,如果我在TX1中提交,则 TX2 中的 SELECT 返回空游标。
这对我来说很奇怪,因为 Oracle 和 MariaDB 中的相同实验导致选择新创建的行 (id=2)。
我在 PG 文档中找不到有关此行为的任何信息。我错过了什么吗?有什么方法可以强制 PG 服务器在获取锁后“刷新”语句可见性?
PS:PostgreSQL 版本 11.1
postgresql - 使用内连接进行查询的方法,用于更新 X 跳过锁定、排序和限制
我需要获取 table 的 N 条记录X
,但我需要使用 INNER JOIN 过滤这些记录,并事先对连接的记录进行相应的排序。
我尝试做的示例(可能不是 100% 准确,因为我使用的是 SQLAlchemy):
当我这样做时,我得到的 distinct 少于 10 个id
(可能是因为连接的行是有限的),但是,我不能DISTINCT
用
FOR UPDATE
. 我想我不能使用子查询,因为FOR UPDATE
.
我应该怎么办?
sql - Why row is visible to several sessions when selected FOR UPDATE SKIP LOCKED?
假设有两个表TST_SAMPLE (10000 rows)
和TST_SAMPLE_STATUS (empty)
。
我想遍历每条记录TST_SAMPLE
并相应地添加一条记录TST_SAMPLE_STATUS
。
在一个简单的线程中:
在多线程解决方案中有一种情况,我不清楚。那么你能解释一下是什么原因导致处理一行TST_SAMPLE
多次。
请参阅下面的详细信息。
在FOR-LOOP
我尝试迭代以下行: - 没有状态(NOT EXISTS 子句) - 当前未锁定在另一个线程中(FOR UPDATE SKIP LOCKED)
对于迭代中的确切行数没有要求。这里pi_limit
只是一个批次的最大尺寸。唯一需要的是TST_SAMPLE
在一个会话中处理每一行。
所以让我们在 3 个线程中运行这个过程。
出乎意料的是,我们看到在几个会话中处理了一些行
请帮助识别程序实施中的错误tst_touch_recs
。
postgresql - Postgres子查询限制更新不尊重限制
我最近将我的 postgres 数据库从 9.5.4 升级到 10.7,并注意到现有查询的一些奇怪行为。
精简版如下所示:
我希望行数更新为 2,但它正在更新与子查询匹配的所有记录,没有限制。如果我删除for update
语句或匹配job_id is null
语句,更新的记录确实等于 2,如预期的那样。在我们更新此查询之前,将更新正确的行数。
10.x 中的某些行为是否发生了变化?
sql - postgres:更新冲突插入行并返回旧值
我需要一个查询来更新表中的一行,但如果 id 不存在,它会插入默认值。它还必须避免线程竞争条件。
我在这里找到了一个应该没问题的答案 https://stackoverflow.com/a/7927957/8372336
使用此查询:
所以我认为它应该在更新后返回旧值,并且应该防止线程竞争条件。
但是如果该行不存在,我需要添加一个插入,并且这次还返回插入的值(旧值没有意义,因为它们不存在)。
所以基本上我需要做类似的事情
但我不确定这样的事情是否可行。我怎样才能让它工作并确保比赛条件?
mysql - 数据库连接中断时不释放 FOR UPDATE 锁
我有一个简单的存储过程,出于测试目的,我已经注释掉了 COMMIT 语句。
我想检查如果在交易尚未提交时拔掉网线会发生什么。结果是事务被回滚,但整个表的锁没有被释放。结果我不能对桌子做任何事情。有时,无缘无故释放锁需要长达 20 分钟。如何确保已使用的资源在 ROLLBACK 时已解锁?