Réponse à Q1 :Utilisez des CTE modificateurs de données et renvoyez le PK série avec le RETURNING
clause :
WITH ins_main AS (
INSERT INTO main(col1)
VALUES ('some value 1')
RETURNING main_id
)
, ins_submain AS (
INSERT INTO submain (main_id, col2)
SELECT main_id, 'some value 2'
FROM ins_main
RETURNING submain_id
)
INSERT INTO subsub (submain_id, col3)
SELECT submain_id, 'some value 3'
FROM ins_submain;
Nécessite Postgres 9.1 ou plus tard.
Réponses associées avec explication et liens :
- Insérer des données dans 3 tables à la fois à l'aide de Postgres
- Valeur du magasin PostgreSQL renvoyée par RETURNING