PostgreSQL中返回*的更新失败
我有这样一个问题:PostgreSQL中返回*的更新失败,postgresql,Postgresql,我有这样一个问题: UPDATE subscribers AS s SET status = 1 FROM (SELECT id FROM subscribers WHERE client_id = *** AND status = 0 ORDER BY id LIMIT 5) AS t WHERE t.id = s.id AND status = 0 RETURNING * (说明:选择状态为0的所有行,但将其更新为状态为1,最多只给我五行) 我在订阅服务器表中有1
UPDATE subscribers AS s SET status = 1
FROM (SELECT id FROM subscribers
WHERE client_id = *** AND status = 0 ORDER BY id LIMIT 5) AS t
WHERE t.id = s.id AND status = 0 RETURNING *
(说明:选择状态为0的所有行,但将其更新为状态为1,最多只给我五行)
我在订阅服务器表中有11行,状态为0
我遇到的问题是:当我在代码中执行这个查询(node.js,不管是哪种编程语言,这都是一个查询问题)在前两个循环(第一个查询)中,它返回5行(这很好,因为我在内部查询中限制了5行)
但是在上一个查询中,我有0条记录…并且在我的表中有一行status=0,正在等待获取
有人有线索吗?我不得不说,我的代码是并行发送查询的(几乎同时发送),它创建了一个“竞争”条件,因为“子序列”查询的内部查询正在接收旧数据(在第一个查询的外部更新之前)。。。所以这是一个比赛条件。。。过了一会儿我就解决了,谢谢你的帮助,我从中学到了很多。你为什么一开始就在循环中运行它?为什么不摆脱派生表并直接执行以下操作:
updatesubscribers set。。。当client_id位于(…)且status=0时
为什么您认为运行多个只更新某些行的语句比一个更新所有行的语句更快?为什么你只想返回5行而不是全部?你的最终目标是什么?@mzalazar你说的是“第一次查询”、“最后一次查询”和“循环”,但没有告诉我们全部情况。请更新您的问题,完整地勾勒出您的实际算法,您可能会得到正确的答案。目前,我们正在猜测(不管教育程度如何),到底发生了什么。@mzalazar加上一个光标?