Puede usar CTE, si quiere todo esto en una declaración:
with foo as (
select * from ...
),
b as (
insert into bar
select * from foo
returning *
)
insert into baz
select * from foo;
Notas:
- Debe incluir listas de columnas con
insert
. - Debe especificar los nombres de las columnas explícitamente para el
select *
. Esto es importante porque las columnas pueden no coincidir en las dos tablas. - Siempre uso
returning
conupdate
/insert
/delete
en CTE. Este es el caso de uso normal, por lo que puede recuperar los identificadores de serie de una inserción, por ejemplo.