Документация к Postgres Pro 9.5.12.1 | |||
---|---|---|---|
Пред. | Уровень выше | Глава 6. Модификация данных | След. |
6.4. Возврат данных из изменённых строк
Иногда бывает полезно получать данные из модифицируемых строк в процессе их обработки. Это возможно с использованием предложения RETURNING, которое можно задать для команд INSERT, UPDATE и DELETE. Применение RETURNING позволяет обойтись без дополнительного запроса к базе для сбора данных и это особенно ценно, когда как-то иначе трудно получить изменённые строки надёжным образом.
В предложении RETURNING допускается то же содержимое, что и в выходном списке команды SELECT (см. Разд. 7.3). Оно может содержать имена столбцов целевой таблицы команды или значения выражений с этими столбцами. Также часто применяется краткая запись RETURNING *, выбирающая все столбцы целевой таблицы по порядку.
В команде INSERT данные, выдаваемые в RETURNING, образуются из строки в том виде, в каком она была вставлена. Это не очень полезно при простом добавлении, так как в результате будут получены те же данные, что были переданы клиентом. Но это может быть очень удобно при использовании вычисляемых значений по умолчанию. Например, если в таблице есть столбец serial, в котором генерируются уникальные идентификаторы, RETURNING может возвратить идентификатор, назначенный новой строке:
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 часто применяется и для того, чтобы проверить содержимое столбцов, изменяемых триггерами.
Пред. | Начало | След. |
Удаление данных | Уровень выше | Запросы |