【问题标题】:PostgreSQL : Transaction and foreign key problemPostgreSQL:事务和外键问题
【发布时间】:2010-09-16 20:49:15
【问题描述】:

我在表 A 中插入一个值,它的主键为序列类型。我想使用查询的返回值作为表 B 的外键......但我收到了这条消息:

错误:在表“tb_midia_pessoa”上插入或更新违反了外键约束“tb_midia_pessoa_id_pessoa_fkey” 详细信息:表“tb_pessoa”中不存在键 (id_pessoa)=(30)。 )

如果没有:我怎样才能做到这一点: - 开始一个新的交易 - 删除我的外键约束 =O ?

问候! 佩德罗

【问题讨论】:

  • 你能更清楚“表A”和“表B”如何对应“tb_midi_pessoa”和“tb_pessoa”吗?

标签: postgresql transactions foreign-keys


【解决方案1】:

您可以创建一个可延迟的 FK,只需使用 DEFERRABLE 或者 INITIALLY DEFERRED,这取决于您。

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

【讨论】:

    【解决方案2】:

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

    SET CONSTRAINTS ALL DEFERRED;
    

    【讨论】:

    • 实际上,当前文档声明不可延迟约束完全不受此语句的影响:在创建时,约束具有以下三个特征之一:可延迟初始延迟、可延迟初始立即或不可延迟。第三类总是 IMMEDIATE 并且不受 SET CONSTRAINTS 命令的影响。前两个类以指示的模式启动每个事务,但它们的行为可以通过 SET CONSTRAINTS 在事务中更改。
    • 你应该什么时候运行它?开始交易后?
    猜你喜欢
    • 2019-04-23
    • 2015-06-30
    • 1970-01-01
    • 2011-06-23
    • 2021-05-28
    • 2023-03-14
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多