Postgresql "update query returning *" 有限制

Postgresql "update query returning *" with limit

我可以 运行 一个带有 return 子句的更新查询并限制行 returned 吗?例如,我 运行 一个 udate 查询,它更新了一百万条记录,但我不想让更新的一百万行返回结果集..只是一个例子说 1000 条记录。这可能吗?

我的查询:

UPDATE table1 SET col1 = value1 RETURNING *

我想获取更新后的列数和更新后的 1000 行样本。

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;

您可以使用 CTE:

WITH updates AS (
  UPDATE my_table SET (f1, f2, f3) = (v1, v2, v3)
  WHERE some_condition
  RETURNING *)
SELECT * FROM updates
LIMIT 1000;

但是,您无法控制将返回哪 1,000 行,除非您可以在外部查询中使用某种排序。