我在 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
列。
这可以做到吗? 如果是这样, 怎么做?
原文由 zola 发布,翻译遵循 CC BY-SA 4.0 许可协议
我遇到了完全相同的问题,我使用“做更新”而不是“什么都不做”来解决它,即使我没有什么要更新的。在你的情况下,它会是这样的:
此查询将返回所有行,无论它们是刚刚插入还是之前存在。