回答

收藏

如何在 PostgreSQL 中 UPSERT (MERGE, INSERT ... ON DUPLICATE UPDATE)?

技术问答 技术问答 261 人阅读 | 0 人回复 | 2023-09-12

如何进行 upsert,这是 MySQL 调用INSERT ... ON DUPLICATE UPDATE标准支持MERGE部分操作。; u  H5 |7 n: g* `' {% n
鉴于 PostgreSQL 不直接支持( pg 9.5 以前),你是怎么做到的?考虑以下几点:
) M5 |/ ?1 Q) ^2 m. ^+ |; K
    CREATE TABLE testtable  id integer PRIMARY KEY,   somedata text NOT NULL);INSERT INTO testtable (id,somedata) VALUES(1,'fred(二),bob');8 C+ k# ^+ n4 m& k/ F- c) k$ K0 _
现在想象一下更新元组(2,Joe(3),Alan'),所以新的表格内容是:% @" a/ ~/ {! m0 T* o+ x6 T, q
    (1,'fred(二),Joe  -- Changed value of existing tuple(3,'Alan    -- Added new tuple
    2 m  e/ I2 h" V) o
这就是人们在讨论的upsert. 至关重要的是,在多个事务处理同一表的情况下,任何方法都必须是安全的——要么使用显式锁定,要么以其他方式防御由此产生的竞争条件。
: T* Q5 a( H5 i这个话题在Insert 广泛讨论 PostgreSQL 中的重复更新?,但是关于 MySQL 随着时间的推移,语法的替代方案增加了一些不相关的细节。我正在寻找明确的答案。2 f" W: Z9 ?  h; I
这些技术也可用于如果没有,就插入,否则什么都不做,即插入…忽略重复键。6 s3 L% Z  j+ G
                                                               
0 q9 }  S) C' R/ ~% X    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则