鉴于Postgresql不直接支持它(在pg 9.5之前),你怎么做呢?考虑以下:
CREATE TABLE testtable ( id integer PRIMARY KEY,somedata text NOT NULL ); INSERT INTO testtable (id,somedata) VALUES (1,'fred'),(2,'bob');
现在想象你想要“upsert”元组(2,’Joe’),(3,’Alan’),所以新的表内容将是:
(1,'Joe'),-- Changed value of existing tuple (3,'Alan') -- Added new tuple
这是人们在讨论一个upsert时。至关重要的是,任何方法必须在同一个表上工作的多个事务存在时是安全的 – 通过使用显式锁定,或者以其他方式保护结果竞争条件。
这个主题在Insert,on duplicate update in PostgreSQL?广泛讨论,但这是关于MysqL语法的替代,并且它增长了一段时间不相干的细节。我正在努力确定的答案。
这些技术对于“如果不存在则插入,否则什么也不做”也是有用的,即“对重复键忽略插入…”。