Postgresql带有限制的"update query returning *"

3

我可以在带有返回子句的更新查询中限制返回的行数吗?例如,我运行一个更新查询并更新了一百万条记录,但我不想将更新后的一百万行返回到结果集中...只返回样本,比如1000条记录。这可能吗?

我的查询:

UPDATE table1 SET col1 = value1 RETURNING *

我希望获取更新后的列数以及更新后的1000行样本。
2个回答

5
with updated as (
  update the_table_with_many_rows
     set some_column = 42
  where ...
  returning *
)
select u.*, 
       count(*) over () as total_update_count
from updated as u
limit 1000;

谢谢您的回答。另外,您能否告诉我是否可以获取更新的总行数以及(带有限制的)选择? - Shannu Vaddi
@ShannuVaddi:请看我的编辑。在你得到答案后更改或扩展问题并不太礼貌。你最初的问题应该已经包含了那个要求。 - user330315
好的。我是第一次在stackoverflow上提问。我更改了问题,以便提供更多信息。顺便说一句,感谢您更新的答案。 - Shannu Vaddi

3
你可以使用CTE来实现这一点:
WITH updates AS (
  UPDATE my_table SET (f1, f2, f3) = (v1, v2, v3)
  WHERE some_condition
  RETURNING *)
SELECT * FROM updates
LIMIT 1000;

但是,如果你不能在外部查询中使用排序,那么你无法控制返回哪些1000行数据。


谢谢您的回答。另外,您能否告诉我是否可以获取更新的总行数以及(带有限制的)选择? - Shannu Vaddi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接