php - doctrine2 在插入记录失败时增加我的主键

标签 php postgresql symfony doctrine-orm

<分区>

Possible Duplicate:
is there a way to avoid calling nextval() if the insert fails in PostgreSQL?
Rails - Postgres does not re-use deleted ids but MySql does?

我有一个非常简单的数据库,PostgreSQL 9.2.1。当我使用此方法插入带有 Doctrine2 的内容时:

$em->persist($entity);
$em->flush();

如果我遇到错误

-means record NOT inserted-

它仍然将 1 添加到我的主键中。因此,如果我刷新页面 50 次,它表示自动增量值设置为 50。我怎样才能防止这种情况发生?如果记录没有被插入而不是为什么主键增加。这是非常关键的,因为它没有使用索引,而且数量还在不断增加。

我不知道它来自什么以及为什么,所以,我没有尝试任何东西。非常卡在这一点上。

最佳答案

Doctrine2 使用事务来完成它的任务。

每次 Doctrine 将其更改刷新到数据库时,它都会打开一个事务,准备好每条记录,然后提交将立即对所有更改进行操作。

在此过程中,需要auto_increment ID 的记录会被分配。如果记录在提交阶段失败,则不会添加记录,但自动增量已发布该 ID。

您可以在此处阅读有关交易的更多信息:http://www.postgresql.org/docs/current/static/tutorial-transactions.html

注意:这对于 MySQL 也是一样的,我相信对于许多其他 RDBMS 也是一样的。

关于php - doctrine2 在插入记录失败时增加我的主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12993866/

相关文章:

sqlite - 将 sqlite 转换为 postgres

php - Symfony elasticsearch包

phpMyAdmin 与 mysql_fetch_array - 为什么我不能让 GROUP BY 工作?

php - 如何使用PHP限制文件上传?

php - 在带有进度条的浏览器中上传大文件,更喜欢没有 flash,只有 js 和 php

php - 随机行 php mysql - 引用?

sql - 后缀 : How to select the first row of each group?

json - Postgres JSON 数据类型 Rails 查询

php - 无限循环存储库 symfony2 fos 用户包

symfony - Doctrine & Symfony2 - 违反完整性约束 : 1062 Duplicate entry 'x-y' for key 'PRIMARY