UPSERT与mySql和postgreSQL兼容

时间:2016-03-05 13:53:21

标签: mysql sql postgresql

我一直在谷歌搜索和尝试不同的查询,但我没有设法让UPSERT查询与mySql和postgreSql一起使用。这里有人知道怎么做吗?

1 个答案:

答案 0 :(得分:4)

没有一个,也不可能一个。 PostgreSQL没有UPSERT语句。新的9.5语句INSERT ... ON CONFLICT UPDATE ...在语法上与MySQL的INSERT ... ON DUPLICATE KEY UPDATE ...不同,因为它在语义上不同,即它的工作方式不同。

9.5中添加的较新的PostgreSQL语句是为了识别MySQL的语法而设计的。不使用相同语法的决定是故意的,因为MySQL的声明在处理多个唯一索引等方面存在很大的歧义,它基本上耸了耸肩并且说'#34; dunno"。

您可以将其隐藏在存储的函数后面,但实际上,这就是您的应用程序应该能够在不同的DBMS上运行不同的SQL的原因。即使您只是针对MySQL和PostgreSQL,尝试始终编写一个适用于所有目标DBMS的语句也是一个失败的原因。