Você pode usar CTEs, se quiser tudo isso em uma instrução:
with foo as (
select * from ...
),
b as (
insert into bar
select * from foo
returning *
)
insert into baz
select * from foo;
Notas:
- Você deve incluir listas de colunas com
insert
. - Você deve especificar os nomes das colunas explicitamente para o
select *
. Isso é importante porque as colunas podem não corresponder nas duas tabelas. - Sempre uso
returning
comupdate
/insert
/delete
em CTEs. Este é o caso de uso normal -- então você pode obter IDs de série de volta de uma inserção, por exemplo.