1
2
你的观察 似乎 不可能的上述命令应 返回新插入的行或预先存在的行的id。并发写入无法处理此问题,因为现有的冲突行已锁定。相关答案中的解释: 除非 引发异常 当然在这种情况下,您会收到一条错误消息,而不是结果。你查过了吗?您是否有错误处理?(如果你的应用程序以某种方式丢弃了错误消息:1)修复它。2) 数据库日志中有一个附加条目,具有默认日志记录设置。) 我确实在表定义中看到FK约束:
如果您试图插入违反约束的行,则会发生这种情况。如果没有与的行
D小提琴 here 你的观察符合犯罪: 但你的解释是基于误解: 这不是博士后的工作方式。无论采用哪种方式(在上面链接的答案中进行了解释),Postgres锁定机制甚至从未考虑新行与旧行的比较。
如果缺少FK值确实是问题所在,则可以使用RCTE在单个语句中添加缺少的(不同的)值。对于像您演示的那样的单行插入很简单,但也适用于同时插入多行。相关: |
2
1
https://www.postgresql.org/docs/9.5/static/sql-insert.html
这是关于你在更新帖子中提到的锁。现在,关于返回行的初始问题,我首先具体地阅读了它。现在我看到了
|
Community wiki · SQL语法新手 1 年前 |
KateMak · 是否将多行中的多列与唯一id组合? 1 年前 |
Karuna · SQL中列内的筛选器[重复] 1 年前 |
Irvan Affandy · 为另一个选择选择声明的键 1 年前 |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |