我正在使用 php 和 postgres 进行 CRUD,我想知道如果出现错误是否有办法回滚事务。
实际上,如果我在事务中遇到错误,id(主键)就会增加,然后我会丢失一个 id 以供将来使用。
我该如何预防?我的意思是,如果插入查询失败,不要在表中进行自动增量。
我正在使用一个类来执行查询:
public function insertRecord ($data){
$campos =$this->getTableFields();
$data =implode ("', '", $data);
$sql ="INSERT INTO {$this->table} ($campos) VALUES (";
$sysData =$this->getDefaultValues();
if($sysData){
$sysData .= ",";
$sql .="$sysData ";
}
$sql .="'$data') RETURNING {$this->campoId};";
echo $sql;
pg_query($this->linkid,$sql);
return $this->validateOperation();
}
事务被回滚。但它仍然会用完序列中的一个数字,而自动递增值是基于该序列的。这是设计使然,可以防止持久锁定,从而降低并行执行性能。
有一些解决方法:
- postgresql 生成无间隙的序列 https://stackoverflow.com/questions/19004453/postgresql-generate-sequence-with-no-gap
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)