Перейти к содержимому

UPDATE

UPDATE изменяет подходящие строки одной таблицы.

UPDATE table_name
SET column_name = expression [, ...]
[WHERE condition]
[RETURNING expression [, ...]]

Каждое присваивание вычисляется для целевой строки по её исходным значениям. Без WHERE целевыми становятся все строки. Условие, не выбравшее строк, даёт успешное обновление нуля строк.

column_name задаёт изменяемый столбец, expression вычисляет новое значение, а condition выбирает строки. RETURNING вычисляет выражения по изменённым строкам.

Без RETURNING результатом является число затронутых строк. RETURNING формирует набор изменённых строк без подразумеваемого порядка.

Все подходящие строки и обслуживаемые индексы изменяются атомарно. Ограничение или конфликт записи не публикует ранее обработанную строку этого же оператора.

Ограничения проверяются по новым значениям. Конкурирующие писатели могут получить повторяемый serialization conflict или row-lock timeout. Навигационные пути в DML-выражениях версии 1.2 не принимаются.

Обычной сессии нужны CONNECT, USAGE схемы и UPDATE для изменяемых столбцов. Чтение столбцов в присваиваниях, WHERE и RETURNING независимо требует SELECT.

CREATE TABLE ref_update (id INTEGER PRIMARY KEY, revision INTEGER NOT NULL);
INSERT INTO ref_update VALUES (1, 1), (2, 1);
UPDATE ref_update SET revision = revision + 1 WHERE id = 1 RETURNING id, revision;

См. Изменение данных, Транзакции и ROLLBACK.