PostgreSQL:交易和外键问题

ped*_*nde 8 postgresql transactions foreign-keys

我在表A中插入一个值,它有一个串行类型作为主键.我想使用查询的返回值作为表B的外键...但我收到此消息:

错误:在表"tb_midia_pessoa"上插入或更新违反外键约束"tb_midia_pessoa_id_pessoa_fkey"DETAIL:键(id_pessoa)=(30)不存在于表"tb_pessoa"中.)

如果没有: - 启动一个新的事务 - 删除我的外键约束= O?

问候!佩德罗

Fra*_*ens 11

你可以做一个延迟的FK,只需要使用DEFERRABLE,也许INITIALLY DEFERRED,这是给你的.

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


Meh*_*ŞAR 5

下面的语句允许将不可延展的约束推迟到提交事务之前。如果您不想更改FK定义。

SET CONSTRAINTS ALL DEFERRED;
Run Code Online (Sandbox Code Playgroud)

  • 实际上,当前不可陈述的约束状态不受此语句的影响:创建后,约束将被赋予以下三个特征之一:初始可推迟,立即在初始或不可推迟。第三类始终为IMMEDIATE,不受SET CONSTRAINTS命令的影响。前两个类以指示的模式启动每个事务,但是可以通过SET CONSTRAINTS在事务内更改其行为。 (2认同)