Как вставить fk на запись, добавленную в этой же транзакции?
Я в одной транзакции добавляю записть в табл 1, получая id вставленной записи (с помощью 'RETURNING id') и пытаюсь вставить этот id в табл 2, как внеш ключ на табл 1
Получают ошибку, что id не найден в табл 1(это происходит в одной транзакции и видимо данные еще не видны)
Как правильно действовать в такой ситуации или единственный способ выносить добавления fk в табл 2 отдельной транзакцией?
это происходит в одной транзакции и видимо данные еще не видны
Предположение ошибочно.
Перепроверяйте внимательнее, что именно делаете. В частности, действительно ли в той же самой транзакции, говорит ли ошибка именно про это ограничение или может быть про другое.
Melkij Да, ошибка на ограничение _fk на табл 1
Также я попробовал и если добавлять запись в табл 1 вне этой транзакции, а отдельно, то ошибки при обновление табли 2 нет
Нужно для вашего FK указать что проверка constraint может быть отложена (DEFERRABLE), но по умолчанию - нет (INITIALLY IMMEDIATE). Указать нужно или при создании таблицы, или выполнить ALTER CONSTRAINT DEFERRABLE INITIALLY IMMEDIATE
После чего, в начале транзакции можно объявить проверку вашего FK как отложенную SET CONSTRAINTS some_fk DEFERRED;
P.S. Ну или выполнять ваши запросы в разных транзакциях, если это допустимо