如何实现UPSERT(合并,插入…)关于重复更新)在PostgreSQL中?

如何实现UPSERT(合并,插入…)关于重复更新)在PostgreSQL中?

这里一个经常被问到的问题是如何重新插入,这就是MySQL所称的。INSERT ... ON DUPLICATE UPDATE和标准支持作为MERGE行动。

考虑到PostgreSQL不直接支持它(在PG9.5之前),您如何做到这一点?考虑以下几点:

CREATE TABLE testtable (
    id integer PRIMARY KEY,
    somedata text NOT NULL);INSERT INTO testtable (id, somedata) VALUES(1, 'fred'),(2, 'bob');

现在假设您想要“插入”元组。(2, 'Joe')(3, 'Alan'),因此新的表内容将是:

(1, 'fred'),(2, 'Joe'),    -- Changed value of existing tuple(3, 'Alan')    -- Added new tuple

这就是人们在讨论upsert。至关重要的是,任何方法都必须是在同一个表中存在多个事务时安全-使用显式锁定,或以其他方式抵抗由此产生的竞争条件。

本主题在插入,在PostgreSQL中的重复更新?,但这是MySQL语法的替代品,而且随着时间的推移,它已经有了一些不相关的细节。我正在研究明确的答案。

这些技术也适用于“如果不存在插入,否则什么也不做”,即“在重复键忽略时插入.”。


跃然一笑
浏览 2133回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP