impressive17
@impressive17

Как вставить fk на запись, добавленную в этой же транзакции?

Я в одной транзакции добавляю записть в табл 1, получая id вставленной записи (с помощью 'RETURNING id') и пытаюсь вставить этот id в табл 2, как внеш ключ на табл 1
Получают ошибку, что id не найден в табл 1(это происходит в одной транзакции и видимо данные еще не видны)
Как правильно действовать в такой ситуации или единственный способ выносить добавления fk в табл 2 отдельной транзакцией?
  • Вопрос задан
  • 54 просмотра
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
это происходит в одной транзакции и видимо данные еще не видны

Предположение ошибочно.
Перепроверяйте внимательнее, что именно делаете. В частности, действительно ли в той же самой транзакции, говорит ли ошибка именно про это ограничение или может быть про другое.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Нужно для вашего FK указать что проверка constraint может быть отложена (DEFERRABLE), но по умолчанию - нет (INITIALLY IMMEDIATE). Указать нужно или при создании таблицы, или выполнить ALTER CONSTRAINT
DEFERRABLE INITIALLY IMMEDIATE

После чего, в начале транзакции можно объявить проверку вашего FK как отложенную
SET CONSTRAINTS some_fk DEFERRED;

P.S. Ну или выполнять ваши запросы в разных транзакциях, если это допустимо
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы