Thread: Re: [pgsql-ru-general] Возможно ли вставлять в несколько таблиц?
Привет,
// Dmitriy.
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 в функцию, возвращающую
требуемый набор столбцов (или композитный тип).
делать нельзя. Добиться желаемого эффекта можно
поместив INSERT ... RETURNING в функцию, возвращающую
требуемый набор столбцов (или композитный тип).
// Dmitriy.
Re: [pgsql-ru-general] Re: [pgsql-ru-general] Возможно ли вставлять в несколько таблиц?
From
Sergey Konoplev
Date:
2011/10/31 Dmitriy Igrishin <dmitigr@gmail.com>: >> Поскольку INSERT - SELECT работает то возникает соблазн написать >> INSERT INTO table2 (table1_id, name) >> INSERT INTO table1 (a, b) VALUES (1, 2) RETURNING "id", '123' AS "name" >> >> Но такая запись не работает. Говорит что синтаксическая ошибка на > > RETURNING ... не тоже самое, что SELECT ..., поэтому так > делать нельзя. Добиться желаемого эффекта можно > поместив INSERT ... RETURNING в функцию, возвращающую > требуемый набор столбцов (или композитный тип). Если 9.1, то для этого ещё можно использовать WITH с DML http://www.postgresql.org/docs/9.1/static/queries-with.html#QUERIES-WITH-MODIFYING -- Sergey Konoplev Blog: http://gray-hemp.blogspot.com / Linkedin: http://ru.linkedin.com/in/grayhemp / JID/GTalk: gray.ru@gmail.com / Skype: gray-hemp
Re: [pgsql-ru-general] Re: [pgsql-ru-general] Возможно ли вставлять в несколько таблиц?
From
Dmitriy Igrishin
Date:
31 октября 2011 г. 13:11 пользователь Sergey Konoplev <gray.ru@gmail.com> написал:
2011/10/31 Dmitriy Igrishin <dmitigr@gmail.com>:>> Поскольку INSERT - SELECT работает то возникает соблазн написать
>> INSERT INTO table2 (table1_id, name)
>> INSERT INTO table1 (a, b) VALUES (1, 2) RETURNING "id", '123' AS "name"
>>
>> Но такая запись не работает. Говорит что синтаксическая ошибка на
>> RETURNING ... не тоже самое, что SELECT ..., поэтому такЕсли 9.1, то для этого ещё можно использовать WITH с DML
> делать нельзя. Добиться желаемого эффекта можно
> поместив INSERT ... RETURNING в функцию, возвращающую
> требуемый набор столбцов (или композитный тип).
http://www.postgresql.org/docs/9.1/static/queries-with.html#QUERIES-WITH-MODIFYING
Кстати да! Хорошая альтернатива!
--
// Dmitriy.