如何在 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. ^+ |; KCREATE 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 解决方案: |
|
|
|
|
|