Ссылка на вставленный идентификатор в нескольких транзакциях вставки в Postgres - PullRequest
0 голосов
/ 31 мая 2019

Мне нужно создать запрос SQL, который должен иметь возможность вставлять данные в первую таблицу, захватывать вставленный идентификатор и затем использовать его в качестве внешнего ключа в следующих таблицах.

WITH inserted AS (
    INSERT INTO firstTable (name) VALUES ('somename') RETURNING id
)

SELECT * FROM inserted; -- this has the inserted id

INSERT INTO secondTable (name, foreign_id) VALUES ('someexternalname', ???)

Итак, как мне ссылаться на id в inserted во вставке secondTable?

Ответы [ 3 ]

2 голосов
/ 31 мая 2019

Вы можете сделать это:

WITH inserted AS (
    INSERT INTO firstTable (name) VALUES ('somename') RETURNING id
)

INSERT INTO secondTable (name, foreign_id)
SELECT
'someexternalname',
id
FROM inserted;
2 голосов
/ 31 мая 2019

Вы выполнили эти 80% процентов, полный SQL:

with inserted as (
 insert into first_table(name) values ('somename') returning id
)
insert into second_table(name, foreign_id) select 'someexternalname',id from inserted
0 голосов
/ 31 мая 2019

Вы можете попробовать это:

INSERT INTO secondTable (name, foreign_id) VALUES ('someexternalname', (SELECT 
MAX (id) FROM firstTable))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...