PostgreSQL: проблема транзакции и внешнего ключа - PullRequest
8 голосов
/ 17 сентября 2010

Я вставляю значение в таблицу A, в которой первичный ключ имеет серийный тип. Я хочу использовать возвращенное значение запроса в качестве внешнего ключа таблицы B ... но я получаю это сообщение:

ОШИБКА: вставка или обновление таблицы "tb_midia_pessoa" нарушает ограничение внешнего ключа "tb_midia_pessoa_id_pessoa_fkey" DETAIL: Key (id_pessoa) = (30) отсутствует в таблице "tb_pessoa" )

Как я могу сделать это возможным без: - начало новой транзакции - снятие ограничений по внешним ключам = O

Привет! Pedro

Ответы [ 2 ]

11 голосов
/ 17 сентября 2010

Вы можете сделать отложенный FK, просто используйте DEFERRABLE и, возможно, изначально отложено, это ваше дело.

http://www.postgresql.org/docs/current/static/sql-createtable.html

5 голосов
/ 03 января 2015

Приведенный ниже оператор позволяет откладывать неоткладываемые ограничения до совершения транзакции.Если вы не хотите изменять определения FK.

SET CONSTRAINTS ALL DEFERRED;
...