2010-09-16 7 views
3

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

ОШИБКИ: вставки или обновления на стол «tb_midia_pessoa» нарушает ограничение внешнего ключа «tb_midia_pessoa_id_pessoa_fkey» ДЕТАЛЬ: Ключ (id_pessoa) = (30) нет в таблице «tb_pessoa».)

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

С уважением! Pedro

+0

Можете ли вы уточнить, как «Таблица A» и «Таблица B» соответствуют «tb_midia_pessoa» и «tb_pessoa»? –

ответ

3

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

SET CONSTRAINTS ALL DEFERRED; 
+2

На самом деле, текущая документация утверждает, что отложенные ограничения не затрагиваются вообще этим утверждением: при создании ограничение имеет одну из трех характеристик: НЕИСПРАВНОСТЬ НЕИСПРАВНО, ОТРИЦАТЕЛЬНО НЕПРАВИЛЬНО НЕМЕДЛЕННО или НЕ ДЕФРИРУЕТ. Третий класс всегда является IMMEDIATE и не зависит от команды SET CONSTRAINTS. Первые два класса запускают каждую транзакцию в указанном режиме, но их поведение может быть изменено в транзакции с помощью SET CONSTRAINTS. – user2847643

Смежные вопросы