Можете да използвате CTE, ако искате всичко това в един израз:
with foo as (
select * from ...
),
b as (
insert into bar
select * from foo
returning *
)
insert into baz
select * from foo;
Бележки:
- Трябва да включите списъци с колони с
insert
. - Трябва да посочите имената на колоните изрично за
select *
. Това е важно, защото колоните може да не съвпадат в двете таблици. - Винаги използвам
returning
сupdate
/insert
/delete
в CTE. Това е нормалният случай на употреба -- така че можете да получите обратно серийни идентификатори от вмъкване например.