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.