31 октября 2011 г. 12:12 пользователь Dmitry E. Oboukhov <unera@debian.org> написал:
Если пишем
INSERT INTO table1 (a, b) VALUES (1, 2) RETURNING "id", '123' AS "name"
то возвращается результат вида
id | name 1 | 123 2 | 123 3 | 123
и так далее
Поскольку INSERT - SELECT работает то возникает соблазн написать
INSERT INTO table2 (table1_id, name)
INSERT INTO table1 (a, b) VALUES (1, 2) RETURNING "id", '123' AS "name"
Но такая запись не работает. Говорит что синтаксическая ошибка на втором INSERT. А в документации не вижу упоминания о том что в качестве query нельзя применять INSERT.
И вот поскольку здесь есть некая двоякость в том к чему относится RETURNING то я думаю, может я неправильно чет в синтаксисе делаю?
RETURNING ... не тоже самое, что SELECT ..., поэтому так делать нельзя. Добиться желаемого эффекта можно поместив INSERT ... RETURNING в функцию, возвращающую требуемый набор столбцов (или композитный тип).