我在 PostgreSQL 9.5 中有以下 UPSERT:
INSERT INTO chats ("user", "contact", "name") VALUES ($1, $2, $3), ($2, $1, NULL) ON CONFLICT("user", "contact") DO NOTHING RETURNING id;
如果没有冲突,它会返回如下内容:
---------- | id | ---------- 1 | 50 | ---------- 2 | 51 | ----------
但如果有冲突,它不会返回任何行:
---------- | id | ----------
id如果没有冲突,我想返回新列或返回id冲突列的现有列。 这可以做到吗? 如果是这样, 怎么做?
id
我遇到了完全相同的问题,我使用“做更新”而不是“什么都不做”来解决它,即使我没有什么要更新的。在你的情况下,它会是这样的:
INSERT INTO chats ("user", "contact", "name") VALUES ($1, $2, $3), ($2, $1, NULL) ON CONFLICT("user", "contact") DO UPDATE SET name=EXCLUDED.name RETURNING id;
此查询将返回所有行,无论它们是刚刚插入还是之前存在。