【问题标题】:PostgreSQL insert multiple values if foreign key exists如果存在外键,PostgreSQL 插入多个值
【发布时间】:2022-11-07 01:57:06
【问题描述】:

PostgreSQL:仅当外键存在时如何插入多个值

让我们举一个例子来澄清这个请求:

鉴于:

  1. 具有多行和属性的表 A:(A_attr1(键),A_attr2)。
  2. 具有属性的表 B (B_attr1(钥匙) ,A_attr1(外键),B_attr2)。

    在表 B 中插入值仅当外键存在时.

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    首先,我们需要考虑一个事实,即(健康)状况(表A中存在外键)是根本,事实上,如果我们尝试在 Table_B 中添加值A_attr1如果它在 Table_A 中不存在,我们会收到这种类型的错误:

    ERROR: the INSERT or the UPDATE on the TABLE table_B violates the foreign key constraint
    "_A_attr1_"
    DETAIL: the key (A_attr1)=(wrong_value) it's not present in the table "Table_A"
    

    这是一个可能的解决方案:

    INSERT INTO Table_B(B_attr1, A_attr1, B_attr2)
    SELECT x.*
    FROM (VALUES 
    
    (something,something_else, something_else2),
    (something_else3,something_else4, something_else5),
    ...
    (something_else20, something_else21,something_else22)
    ) x(B_attr1, A_attr1, B_attr2)
    
    WHERE EXISTS(
    SELECT FROM TABLE_A y 
    WHERE (y.A_attr1)=(x.A_attr1)
    FOR SHARE);
    

    结果是在 B 中添加所有可接受的元组(即具有现有外键的那个)。

    这篇文章是以下问题的扩展: PostgreSQL insert if foreign key exists

    该解决方案基于这篇文章中的 cmets:

    https://dba.stackexchange.com/questions/252875/how-to-make-on-conflict-work-for-compound-foreign-key-columns/252925#252925

    【讨论】:

      猜你喜欢
      • 2021-02-28
      • 2021-03-20
      • 2015-01-20
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 2016-06-26
      相关资源
      最近更新 更多