好的,所以我刚开始使用 pgSQL,当然发现没有ON DUPLICATE KEY
像 MySQL 那样。用 PHP 开发。
我想听听你对这个解决方案的意见,无论是好事还是坏事,如果有任何错误,也可能是错误。
所以我有一个已填充数据的对象(在 PHP 中)。如果在编辑时进行了填充,则对象的 ID 也将在那里,否则 ID 将为 0。在保存时,首先我检查该 ID,如果它 > 0 则可以,否则,我将获得一个新 ID我的数据库,使用这个:
$query = "SELECT NEXTVAL(PG_GET_SERIAL_SEQUENCE(?, ?)) id";
正如我最近了解到的,可以保证 ID 是唯一的,这通常是最重要的 (@IMSoP)。
接下来是实际的 upsert,我发现的最简单的方法是这个(@Craig Ringer 也评论说它有并发问题)
UPDATE table SET field='C', field2='Z' WHERE id=3;
INSERT INTO table (id, field, field2)
SELECT 3, 'C', 'Z'
WHERE NOT EXISTS (SELECT 1 FROM table WHERE id=3);
仅此而已。
我很想听听你的意见:)