Как сохранить данные в таблицах в отношении 1-1 (одна транзакция) - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть случай, когда мне нужно добавить записи в две таблицы, которые имеют отношение 1-1. (например: table1 и table2) в одной транзакции .

Сначала мне нужно добавить элемент в table1 и получить id только что добавленного элемента. Теперь мне нужно использовать table1.id для создания второго элемента table_one_id, который является внешним ключом в table2 с этим идентификатором.

Это просто для того, чтобы убедиться, что у меня нет данных в таблице один, если второй не удался!

imagine table1 = users and table2 = cars

Я не хочу хранить users.id в базе данных, если нет cars.userId

Is есть такой запрос, или какой предпочтительный способ сделать это?

1 Ответ

2 голосов
/ 23 апреля 2020

Вы даже можете сделать это в одном выражении

with new_parent as (
  insert into parent_table (<columns>)
  values (..)
  returning id; --<< this is the generated ID from parent_table
)
insert into child_table (parent_id, <other columns>)
select id, 42, 'some_value'
from new_parent;

Другой вариант - использовать lastval():

insert into parent_table (<columns>)
values (..);
insert into child_table (parent_id, <other columns>)
values (lastval(), ...);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...