【问题标题】:Postgres UPSERT reuse column values from INSERT on UPDATEPostgres UPSERT 在更新时重用来自 INSERT 的列值
【发布时间】:2018-10-05 21:07:43
【问题描述】:

我有一个可以正常工作的基本 upsert 查询:

insert into table (id, data) values (1, '<data_string>') 
    on conflict (id) do update set data='<data_string>';

唯一的问题是我需要通过网络传输大量此类查询,所以我想知道是否有办法通过不在查询中两次列出 &lt;data_string&gt; 来将流量减少一半?

【问题讨论】:

    标签: sql postgresql query-optimization upsert


    【解决方案1】:

    是的,有专门的表EXCLUDED用于目的:

    INSERT INTO tbl (id, data)
    VALUES (1, '<data_string>') 
    ON CONFLICT (id) DO UPDATE SET data = EXCLUDED.data;

    点赞the manual explains

    请注意,特殊的excluded 表用于引用最初建议插入的值:

    也适用于多行 INSERT:

    INSERT INTO tbl (id, data)
    VALUES (1, '<data_string1>') 
         , (2, '<data_string2>') 
         , (3, '<data_string3>') 
    ON CONFLICT (id) DO UPDATE
    SET data = EXCLUDED.data;
    

    【讨论】:

      猜你喜欢
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-16
      • 2018-08-02
      相关资源
      最近更新 更多