6.4. Возврат данных из измененных строк#

6.4. Возврат данных из измененных строк

6.4. Возврат данных из измененных строк #

Иногда нужно получить данные из измененных строк во время их обработки. Команды INSERT, UPDATE и DELETE имеют дополнительную необязательную фразу RETURNING, которая поддерживает такой функционал. Использование RETURNING позволяет избежать выполнения дополнительного запроса к базе данных для сбора данных и это особенно полезно, когда нет альтернативных способов точно определить измененные строки.

Допустимое содержание предложения RETURNING аналогично списку вывода команды SELECT (см. Раздел 7.3). Оно может содержать имена столбцов целевой таблицы команды или выражения значений, использующие эти столбцы. Краткая запись RETURNING * выбирает все столбцы целевой таблицы по порядку.

В команде INSERT данные, выдаваемые в RETURNING, берутся из строки в том виде, в каком она была вставлена. Это не очень удобно при простых вставках, так как мы просто получаем данные, предоставленные клиентом. Но это может быть очень удобно при использовании вычисляемых значений по умолчанию. Например, при использовании столбца serial для предоставления уникальных идентификаторов, RETURNING может вернуть ID, назначенный новой строке:

CREATE TABLE users (firstname text, lastname text, id serial primary key);

INSERT INTO users (firstname, lastname) VALUES ('Joe', 'Cool') RETURNING id;

Предложение RETURNING также очень полезно с INSERT ... SELECT.

В команде UPDATE данные, доступные для использования в RETURNING, представляют собой новое содержимое измененной строки. Например:

UPDATE products SET price = price * 1.10
  WHERE price <= 99.99
  RETURNING name, price AS new_price;

В команде DELETE данные, доступные для RETURNING, являются содержимым удаленной строки. Например:

DELETE FROM products
  WHERE obsoletion_date = 'today'
  RETURNING *;

Если на целевой таблице есть триггеры (Глава 36), то данные, доступные для RETURNING, представляют собой строку, измененную триггерами. Таким образом, проверка вычисляемых триггерами столбцов является еще одним распространенным случаем использования RETURNING.