How to limit rows in PostgreSQL update statement
You need to search for the desired rows with a subquery, and use the primary key of the table to relate those rows to the table in the UPDATE statement.
In general, rownum
can be replaced with the row_number()
window function (see, e.g., Using window functions in an update statement), but for this case, it is easier to just use limit
:
UPDATE employees
SET commission_pct = 0
WHERE id IN (SELECT id
FROM employees
WHERE commission_pct IS NULL
LIMIT 10000);
If the exact number of rows updated is not critical and the goal is just to keep the transaction durations brief you can use a random expression or an expression involving some uniformly distributed column to limit the number of rows updated.
These expressions will need to be modified when the query is repeated.
values of id.
UPDATE employees
SET commission_pct = 0
WHERE commission_pct is null and id < 100000
mod 100 of id
UPDATE employees
SET commission_pct = 0
WHERE commission_pct is null and id % 100 = 0
random selection
UPDATE employees
SET commission_pct = 0
WHERE commission_pct is null and random() < 0.01
"birthday"
UPDATE employees
SET commission_pct = 0
WHERE commission_pct is null and
day_of_birth - date_trunc(year,day_of_birth)::date = 0