Re: PL/pgSQL PERFORM with CTE
От | Boszormenyi Zoltan |
---|---|
Тема | Re: PL/pgSQL PERFORM with CTE |
Дата | |
Msg-id | 52136517.4040702@cybertec.at обсуждение исходный текст |
Ответ на | Re: PL/pgSQL PERFORM with CTE ("David E. Wheeler" <david@justatheory.com>) |
Список | pgsql-hackers |
2013-08-20 14:35 keltezéssel, David E. Wheeler írta: > On Aug 20, 2013, at 2:31 PM, Pavel Stehule <pavel.stehule@gmail.com> wrote: > >> but it works >> >> postgres=# do $$begin with x as (select 10) insert into omega select * from x; end;$$; >> DO > But this does not: > > david=# DO $$ > david$# BEGIN > david$# PERFORM * FROM ( > david$# WITH inserted AS ( > david$# INSERT INTO foo values (1) RETURNING id > david$# ) SELECT inserted.id > david$# ) x; > david$# END; > david$# $$; > ERROR: WITH clause containing a data-modifying statement must be at the top level > LINE 2: WITH inserted AS ( > ^ > QUERY: SELECT * FROM ( > WITH inserted AS ( > INSERT INTO foo values (1) RETURNING id > ) SELECT inserted.id > ) x > CONTEXT: PL/pgSQL function inline_code_block line 3 at PERFORM This is the same error as if you put the WITH into a subquery, which is what PERFORM does. Proof: SELECT * FROM ( WITH inserted AS ( INSERT INTO foo values (1) RETURNING id ) SELECT inserted.id ) x; Best regards, Zoltán Böszörményi -- ---------------------------------- Zoltán Böszörményi Cybertec Schönig & Schönig GmbH Gröhrmühlgasse 26 A-2700 Wiener Neustadt, Austria Web: http://www.postgresql-support.de http://www.postgresql.at/
В списке pgsql-hackers по дате отправления: