问题标签 [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.

0 投票
1 回答
1480 浏览

sql - Postgres SELECT COUNT ... 更新

这是我正在尝试做的伪代码:

除了并发问题,我可以正常工作。当同时从多个会话运行时,两个会话都选择并因此更新相同的东西:(

我可以通过在它的 SELECT 子查询中添加 FOR UPDATE 来获得第二个查询原子。但我不能将 FOR UPDATE 添加到第一个查询,因为聚合函数不允许 FOR UPDATE

我怎样才能使这件作品成为原子交易?

0 投票
1 回答
9902 浏览

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

0 投票
1 回答
620 浏览

python - psycopg2“选择更新”

我正在使用 psycopg2 将 Postgresql 与 Python 一起使用,但我不确定如何获得“选择更新”查询来使用它。除了 psycopg2,我还可以使用其他东西。如何使用 Python 创建用于更新查询的 postgresql 选择?

0 投票
1 回答
99 浏览

voltdb - VoltDB 支持 SELECT FOR UPDATE 吗?

VoltDB 支持 Oracle、PostgreSQL 和 MySQL 中的 SELECT FOR UPDATE 还是有不同的机制来阻止记录更新?

0 投票
1 回答
1474 浏览

postgresql - Postgres:SELECT FOR UPDATE 在锁定释放后看不到新行

尝试在我的应用程序中支持 PostgreSQL DB,发现这种奇怪的行为。

准备:

假设两个并发事务(Autocommit=false, READ_COMMITTEDTX1TX2

TX1:

TX2:

现在,如果我在TX1中提交,则 TX2 中的 SELECT 返回空游标。

这对我来说很奇怪,因为 Oracle 和 MariaDB 中的相同实验导致选择新创建的行 (id=2)。

我在 PG 文档中找不到有关此行为的任何信息。我错过了什么吗?有什么方法可以强制 PG 服务器在获取锁后“刷新”语句可见性?

PS:PostgreSQL 版本 11.1

0 投票
2 回答
826 浏览

postgresql - 使用内连接进行查询的方法,用于更新 X 跳过锁定、排序和限制

我需要获取 table 的 N 条记录X,但我需要使用 INNER JOIN 过滤这些记录,并事先对连接的记录进行相应的排序。

我尝试做的示例(可能不是 100% 准确,因为我使用的是 SQLAlchemy):

当我这样做时,我得到的 distinct 少于 10 个id(可能是因为连接的行是有限的),但是,我不能DISTINCTFOR UPDATE. 我想我不能使用子查询,因为FOR UPDATE.

我应该怎么办?

0 投票
1 回答
206 浏览

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

0 投票
0 回答
98 浏览

postgresql - Postgres子查询限制更新不尊重限制

我最近将我的 postgres 数据库从 9.5.4 升级到 10.7,并注意到现有查询的一些奇怪行为。

精简版如下所示:

我希望行数更新为 2,但它正在更新与子查询匹配的所有记录,没有限制。如果我删除for update语句或匹配job_id is null语句,更新的记录确实等于 2,如预期的那样。在我们更新此查询之前,将更新正确的行数。

10.x 中的某些行为是否发生了变化?

0 投票
1 回答
2745 浏览

sql - postgres:更新冲突插入行并返回旧值

我需要一个查询来更新表中的一行,但如果 id 不存在,它会插入默认值。它还必须避免线程竞争条件。

我在这里找到了一个应该没问题的答案 https://stackoverflow.com/a/7927957/8372336

使用此查询:

所以我认为它应该在更新后返回旧值,并且应该防止线程竞争条件。

但是如果该行不存在,我需要添加一个插入,并且这次还返回插入的值(旧值没有意义,因为它们不存在)。

所以基本上我需要做类似的事情

但我不确定这样的事情是否可行。我怎样才能让它工作并确保比赛条件?

0 投票
0 回答
25 浏览

mysql - 数据库连接中断时不释放 FOR UPDATE 锁

我有一个简单的存储过程,出于测试目的,我已经注释掉了 COMMIT 语句。

我想检查如果在交易尚未提交时拔掉网线会发生什么。结果是事务被回滚,但整个表的锁没有被释放。结果我不能对桌子做任何事情。有时,无缘无故释放锁需要长达 20 分钟。如何确保已使用的资源在 ROLLBACK 时已解锁?