Если перед вами стоит задача добавить некое словарное значение в одну таблицу, при этом, значение первичного ключа может вычисляться автоматически (из sequence, например) и тут же создать еще одну запись в другую таблицу, так, чтобы эта вторая запись ссылалась на первую (например, имела ID новой записи из первой таблицы в одном из своих столбцов), возникает вопрос, где взять значение первичного ключа вновь добавленной записи.
Допустим, у нас есть таблица-справочник dictionary с полями id , title. Поле id привязано к автоматически инкрементируемой последовательности. Другая таблица some_table содержит столбцы id, some_value, dictionary_id. Здесь dictionary_id — ссылка на id в таблице dictionary, а id и some_value имеют какие-то значения по умолчанию.
Чтобы добавить новую запись в dictionary, большого труда не требуется. Но дальше как создать новую запись в some_table так, чтобы поле dictionary_id имело бы значение из только что добавленной в dictionary строки?
Вот готовое решение:
with inserted_id as (
INSERT INTO dictionary (title)
VALUES ('Title') RETURNING id
) INSERT
INTO some_table (dictionary_id)
SELECT id
FROM inserted_id;